From nobody Thu Oct 2 14:27:54 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011016.outbound.protection.outlook.com [52.101.65.16]) (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 53864296BDA; Mon, 15 Sep 2025 22:23:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757975000; cv=fail; b=pUmYn3xokzNYryiJvXLSD6i7xkqqijzcxrCgkLdMnUbjg6vrkT+pGYQ7SGUMuaCDO5PFX1pzgm66Izn6uJekbcMJrN4WQcT9PUF5WJ0VNwAeZLYjBJx/Wd5K0hogLeQFapZl62zwvKGGKAVmzhnXLQUOq2gqNOSYRP0DKDw80Og= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757975000; c=relaxed/simple; bh=BT6+zgjAtVSKd9hVY5H/jnZBBk6w9ntHvRBhofAzFo4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=sRyNOrdhvPlDgDwORWY6J7penV9y2gF5m0TiQfH8KsZ5hy5jxXVfhfPfsGAfasC8hGHAROSQEOn4hQQ4kDQWlV7lavFT6FDOR5vixNLMy/dixStUBJtdtPkjxnB7Qhy2GTcVhiY7XALQK89OdKnjPoc+fWBEfpI+nfH/o4zhy10= 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=ZmOQ5taj; arc=fail smtp.client-ip=52.101.65.16 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="ZmOQ5taj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GzZVbAGDl2XI0loC8MBlRiVDgBbnxTpL3h6H/c73zV1OxpUPAKxlKQhsaB46t/6JghuXEqmcRzALPV9iXuRZ1sagO8AJ09jAwPMg+kq6Jj6olNIML1aACYlCt+hSg1+3gB+fORBTIrlSAqogcouz/kGp5iZT79YodST20Zo7oZqnWVEiiVHP06/KNKG35ZAiljf96XuI+Q8QyDt8qOXEh5taCny+u1HmWhQkX7pJROndNx0SGRniz/OKNLQTBvl4y2Bb3MdZxgHRDT/SyEvLerMFhPJLWTmqXPMlB5MW/akUVguJABS/tF/Go+V0xw9ebHJL71EMbZnmnVIuqfglKA== 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=JXftkPJM2cg4ITOWzR8KUYwGKlXrqnf+OUEgQftV2AI=; b=DgqKFKf3k+mBSyxPPxOVwh+QDSi6XmcWKHXFfR612C4E6dg1f5TC2RBwjXnbPnLx8iRiYlEMq0JOyn6fK36lwnq34Tq3VuGboQe6VyHorQLps7izbzWb/LttxKU8kNZIvIC/fGPB7G5noBRFOpmneZ7MP8fAxY+MSf0SiOYdd8S+JgC/GPVG8I52A5XEJ7omxcXmRnvm5p0TbEPQfXUGyV4/hhpjnnpRcEQaLnSG2ZOfXKgHJZq1Uu0Be6k2kAJHuJ9lUVtZ3MOGSmaVYBmqrWpfyH606Xy5INeRRHrzmEy8Ddpw+n+snNZDfqUk65Kp4hrfinY0hb0GRTv7x/4LgA== 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=JXftkPJM2cg4ITOWzR8KUYwGKlXrqnf+OUEgQftV2AI=; b=ZmOQ5tajuTXqi0E+w55EZLcXL3jPXy3nqjOeEakTDqIOIuQgPVKgyHl+QThCixgAfQ1jOjzHVEE8rbHFfBBP/+TSbaDy9lteZOh9O5554FXx35jieMl6IkI4ZqZHFKnZKgfmUXXfM9XNaMsuZ+Nr/8W1DTYpsDjgvAS02lwyJ6YJMZfXbcuMG4TCui8FEv5NUZozitRsAaIwfH65HYaxjM5ImOIOWA/nngp2l4DQiwUeG30+j5lpeJSMeGCsYvAGMLjyl8KDoXpO32Hkehu1Aqlnqve+7A2LGZ6Tud7I4KBbEtj43Jsi7OeDi5DXoSN+20c6oi5zEY+8sFl4h1SRqw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9621.eurprd04.prod.outlook.com (2603:10a6:20b:4ff::22) by VI1PR04MB6989.eurprd04.prod.outlook.com (2603:10a6:803:131::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 22:23:15 +0000 Received: from AS4PR04MB9621.eurprd04.prod.outlook.com ([fe80::a84d:82bf:a9ff:171e]) by AS4PR04MB9621.eurprd04.prod.outlook.com ([fe80::a84d:82bf:a9ff:171e%4]) with mapi id 15.20.9137.010; Mon, 15 Sep 2025 22:23:15 +0000 From: Frank Li Date: Mon, 15 Sep 2025 18:22:44 -0400 Subject: [PATCH v2 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: <20250915-vntb_msi_doorbell-v2-1-ca71605e3444@nxp.com> References: <20250915-vntb_msi_doorbell-v2-0-ca71605e3444@nxp.com> In-Reply-To: <20250915-vntb_msi_doorbell-v2-0-ca71605e3444@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=1757974988; l=3036; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=BT6+zgjAtVSKd9hVY5H/jnZBBk6w9ntHvRBhofAzFo4=; b=zCwgGT80nBxj3WwonDIBG09noe8Ph/l49qxqpTIcmKSgr7/ZMVUC4Al0mFi+Vetq+DFUJhmGT rqcvb50vLjqCtE3vUQbbRLGKGhomrBLRtJZ4EoX5pJHK9bTBDtVu+24 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR13CA0075.namprd13.prod.outlook.com (2603:10b6:a03:2c4::20) To AS4PR04MB9621.eurprd04.prod.outlook.com (2603:10a6:20b:4ff::22) 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: AS4PR04MB9621:EE_|VI1PR04MB6989:EE_ X-MS-Office365-Filtering-Correlation-Id: 6032f36c-2dab-4c9a-05ee-08ddf4a676b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|19092799006|52116014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VVNaRWlJcnYraktBY3lVZithY1BnS0ttY3Vuc0I2dU8rWmxmSVhTaW42b0Nm?= =?utf-8?B?MmxseThVSmRXczJoSStSV3FRc1A2alJVd215RDJza3dqUS8vNmxkZFNyWWdi?= =?utf-8?B?M3pndEI0cGNxTm9RWkZ6a3o1T2pmNlpMOUkwN0ZYRTFYMjNoMlRoTnBaZnlZ?= =?utf-8?B?b1FsR015WkZNLzkzQi9BTVh3cm5KcEpKU1loS0lZRnl3NG5GQ3NsZ3pFMjVW?= =?utf-8?B?czNNKzJXRytoRFVqaXFIUzczTWpQN1FDbUN3K0hLVnlUaFhFY0JZOEJPS0tt?= =?utf-8?B?TEY5ZXN2ZnRXdmpHMDVWTFpVUjUxNzFXMmNCQmtBSjVLdlJ3TjNoQitHRmRv?= =?utf-8?B?UDJpaUtnL21kS2Y4TFh5c1F4VXV1WldZRzVSSElyb3BFZWlKdWRPUS9FeDZQ?= =?utf-8?B?d3g0Mnl3VWRTWU1aNCs3dnZVRVdEZzc5U09vOWFBRUtIY0djUXk0SWZvb21q?= =?utf-8?B?YmdkQTQ0MWNHVHg0cDk4aHpjUlpFQUdBWDBPTngvYWtTWk9OMURRSW9HUlhQ?= =?utf-8?B?R2NJSG5pL0RwanZ0aXJ0bXFyZFhVY216bk4zZnhtMUJHcUhxTUZobEZLNjZC?= =?utf-8?B?aXArbnM4UW9uOGxqK2JYeE41WmJYaUR0d0FxM1pkOC90OUErbFo2dWcvVlFE?= =?utf-8?B?c2RZb3RqS25lSmJOQWhYandKQkZvNkdFUE1BUlpCd2E0bVEzdjRnVWRFQkpw?= =?utf-8?B?RDlDYm01UnVJSE96ZDRJREZHRm9GQ1dUWGFvY2VHV0FBaXF5V1RnTDZBajNn?= =?utf-8?B?eU5heGRMRTVTckNsTkdPSEtDVVIweUtBNVZQdkJIM1VlVi9lT294YWVTVGZF?= =?utf-8?B?WlFqeXNCN2kwQWduZDFFbkZGdWUrRG5kc3VCUk51SU94ODhRWE96aXFBOUlG?= =?utf-8?B?TFNDcUlFdjhuWGd2NW5OaEZaQSsydmlJbWUvdmFONEZlZGdsTElVZ2t0L0l3?= =?utf-8?B?dU15L3NCdCt2YStmcHhxaGdOcytzZ3dYZ1gwb3ZEUFN6SHM3MVhmb01NN0Nq?= =?utf-8?B?S1JvbEFlMi9LQjgyVmx5c2ttUlhCTVhnbmJWYWVFbjd3Rlo1NnVWcVhmU0tM?= =?utf-8?B?THVzSzFISXhsSUNHNFdBRnViSjlwTkQ1RExYVVFQbjNtbk5lV01lWlc0STdl?= =?utf-8?B?U2ZTaWYvc2h1THUxMXNDc3gvcTVDci9LNldacFhBdkMxYjYwaEpqY045VE95?= =?utf-8?B?Y2c1NVA0YXl4UFpKOHBiMDltWnRXYXltcmp6cUtvR2RyUkQ3c1o0Yll1cFVU?= =?utf-8?B?RVd0Y3FDVVBnUnBxRGVHcjYyRUxNZzc1ZnNucG00MGtqNUVKWkVoaUU1dUZt?= =?utf-8?B?VzYrRjJJUmhDVGQxeWJ1Rk5VaysrWXN3cWp4Y3cyKzF4MmUzT3MwRmxTcHlS?= =?utf-8?B?bzBHSk1rZXR1Q3JyTE9qemE0R1kzRnBKa2JHRGJiYjZ6SDkwK2V5VElPOUwy?= =?utf-8?B?QTJzWnhQZHM1a0didHpHRThWTHpuckRDSUpUZ1oxU25IVnlUTlZEcHd2WUJO?= =?utf-8?B?MnNRWUh2WXhBWFBoU2p5aUdwcnVudHdzamZ2ZGkxMWlwbDFOR3l3RXhqK2li?= =?utf-8?B?TTAyeVhTcHpDeE5MbmYvZnNoMzR2VkRSSFUzMTdjRlNERkh1S3VhS1hYazY0?= =?utf-8?B?TTV5Yk9vb0FtV2FxY1NKUUtCOXVUSXVIdmU5VU95SDV3QzhTTksyN3V5aDZZ?= =?utf-8?B?SytQTFdJUDFLRU9YV3BTemp3M3FVTVJJRm5aVkdwdjE3eXpWdDQya2tqeEJE?= =?utf-8?B?UFczcW1BRUZyZnBUMjQ1ME96ODl5dU1xMHNpcGZSLzFyUks3cVVHVGtqbCtP?= =?utf-8?B?RlBTaWlPbS9DVVpyZExVaFJwYmFZNklLbFNGcDZFVmVNZms2K1FTK3RGYkNT?= =?utf-8?B?Wkt4OEdyRTZhZkhtb04yeTdGaUR1L1lTaGdoTDY3bXJ4SzFieTI4MlhhVktu?= =?utf-8?B?Y0dQZ3dBbHFndHBhQ1hNL25ucFhjdm5KSHhLVGltK085VlllZWI5Y2FEeDhz?= =?utf-8?B?T3VKcEpNMC9nPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9621.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(19092799006)(52116014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RERJZTkrK2I5aksrSTdCdkExRnVZamluZ2JhMkJZVVJRMmJzZE9tWmtkbHhn?= =?utf-8?B?N2ZMU2owZXRyU3lwN3lBZkI3cTU1Z3ZES1FXK3dtOEJTT0VhbldubS90Z0FY?= =?utf-8?B?NzNBZGpzcFBzU0diY3VrazgrYVpCcm1OL1pRVUpKRi9iRndQQ0lrb1lBZG8x?= =?utf-8?B?V2l0d3owMUhuZHA4SUJkS0JnK1g4N1RPYUoxYTdXWmJaUXVFRmJqbEdVUVRw?= =?utf-8?B?YUJUcVJFeHc2V2tmYlB6a3VNOXIvWEI5SU9HT0trR2FPdmQvSkJnNWhRRWZO?= =?utf-8?B?TjJPSlM1czV0MDZZQ3l0eUNkdFVpbllGblNHTEtWU2x2MmZsVDI5RWVCWU94?= =?utf-8?B?clQ3bGhvUmYxRTNnUEV0anp2dDdjaXZOeWlaVFZWcXc3TEMwREczTjVXMnRG?= =?utf-8?B?NWQ2NG82Vytqb2EvZGNTZFB2QmtZN3RHQ0VGSWlVS3pJcGtJQjdncUR0cWpv?= =?utf-8?B?dC9FNFM2UzlqdW9ibVVQMUdreTVGVGlHNURMQVdOdERTNFZoQkRnU2ZrN2ts?= =?utf-8?B?MUg3KzBteUxoV2FzRVhDeDBjVlZqcEV2V2Z4U0xPZlNhNHBTaExqMFkwRm1n?= =?utf-8?B?YXZQUmRicWpLNFk1ZXBDL0RFMmRPR3hhT3U0VU5YYUQzM0NjUGs1MmxtSVZa?= =?utf-8?B?K2RPbEsvNHRLUlppZSsyQXNjNkZycmJWY2Z3NlRScTM4ZHd2c3NITDZaTjdh?= =?utf-8?B?RFpoWmF5MElvaHVySU9ab25DZTlYTHJJdVFBQy8yY09SN1h2bDdRWEhLaXFY?= =?utf-8?B?VnNHRjlXcFBtOHRPRHd6WHRheERPaWc1RWVsQlFNNXhpL3NIKzhscXhuS1pE?= =?utf-8?B?TXk4RW9KbC92OXFOdE1yNDYwd2NkUk44c0h2NkNDQm5kVW1WUS91b3YvZHg1?= =?utf-8?B?RzliNzd4R2V5OFJPbGFsQVoweVFiV2tYaXVtbDBudjIwQW1naytiZWl5a2Rs?= =?utf-8?B?aGRPOVNySk0rSzZ3cVpDelZQSndRWlEzYW92c0szNWVwL1g0UHVBZVUyMmlr?= =?utf-8?B?MmJ1UENyRHRSb1k3cDlOOGc2dlJuMXp2MWY1b08yL1ByT1pLdWJzMlJlMXhL?= =?utf-8?B?bGQvNExPVnhraUVZd2hSZlRqWXhJdTdJaWttQkNxbUtIR2hhUFZTcTNtM3pm?= =?utf-8?B?dktwb25zWXBXTDV3VFhiNWtOMjcyN0xrVWVkYzRMWk5SUG5NallpNVhoaTFO?= =?utf-8?B?SnBSRk94NnUyeVhMU1Jpa0k2b1FERS9udm1WWG13VmcxZk1TTEx5S3JlUXh5?= =?utf-8?B?bE9wakNDeDN0MFpyVVFLait5WkhtS0lRVzZ3eEY4T01JRUFjU0RwUjlPZUk4?= =?utf-8?B?NTlaemxsUW1IWWhkaWxvOEwrK3c1ZllXSllUYzBhQWEvbDU4ZlltQzFuZUJQ?= =?utf-8?B?TVpjRUV6UUllaVlWZEFrZXNvTmZrdTdtQ1c2VkxsRUlGSGxGN3VpWnMxeGlL?= =?utf-8?B?d0U0eHBUWTZYaVc0NWJVbVNtRXU0WmwyOSs1Z1VVbU56a1pVVzIxUThIUlhq?= =?utf-8?B?b203TUlJbEdxZW5IYWl5ZDR0dlVuZEJVRUNkSkpqQ04xSk5xRVRlUjFBakc0?= =?utf-8?B?MS9PZXAwNGNqbzdJaGpTSCs1WUE2TWtVODN2UjY0VGVyZkhrMUc5ZGRjRmxw?= =?utf-8?B?NGErOFJWdC9WNU1nZ0E2UDVQVGhxSmIwYnFUTVZsT0ZHai9HdnMwb3V0Ynhy?= =?utf-8?B?RldPZFZqM2pqNC9TbnFIbyswMkhXbzlKYlpSSHFUcW9HanBpUktlWnZzdGVU?= =?utf-8?B?WFNZVDMwVjY3VXg0RW9DditwTVlua3ArcVpoQmpycFNIYm5tejFPaHhhc3Rx?= =?utf-8?B?dHFyUCtCSHVHekt4NWpmSDcxZy9Gd2FJSVlXNGZLQ212ZFJJTlBNbG1xeHMy?= =?utf-8?B?dmtoMFgwNUhVQ1JjUUlHb2docWxCdkc0ZThMUWdGU1FuVU9DTjZqKzBTZHRn?= =?utf-8?B?OUZHR2d5N2grMm1tMXFUbWdvRytNOXBqSmJLbmk3Q0Z2N2FCT1E0SW9zcndM?= =?utf-8?B?eCtBaGlrNHY2b1FGYkNpTThvOHIzSHlmSjE5Q1h5YkNEUjdlbUxSRW9oZ1E3?= =?utf-8?B?dzJJdmNRT01nSkdKeHFDUmozWjBqa1V2WTNjejNuTmhvZkFIdllYYXovTEFF?= =?utf-8?Q?ps0u2kjGkwW7Y4pOY9aRhMEhr?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6032f36c-2dab-4c9a-05ee-08ddf4a676b9 X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9621.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 22:23:15.2377 (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: 8tYwap7GgAkbdZQgmo3D7zDTnUUUrXIWTXz2OWyvmcuKWk0moqfmj+qOCfj5g7MLJr7VGHUtD81l7RfNK6BC/g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6989 Introduce pci_epf_get_bar_required_size() to retrieve the required BAR size. Prepare for adding support to set an MMIO address to a specific BAR. No functional changes. Signed-off-by: Frank Li --- change in v2 - new patch --- drivers/pci/endpoint/pci-epf-core.c | 52 ++++++++++++++++++++++++---------= ---- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci= -epf-core.c index d54e18872aefc07c655c94c104a347328ff7a432..4281067d4a62da6fbf6c2fb807b= 0f1b5afd1f45b 100644 --- a/drivers/pci/endpoint/pci-epf-core.c +++ b/drivers/pci/endpoint/pci-epf-core.c @@ -248,6 +248,36 @@ void pci_epf_free_space(struct pci_epf *epf, void *add= r, enum pci_barno bar, } EXPORT_SYMBOL_GPL(pci_epf_free_space); =20 +static size_t +pci_epf_get_bar_required_size(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; + + 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 0; + } + size =3D bar_fixed_size; + } else { + /* BAR size must be power of two */ + size =3D roundup_pow_of_two(size); + } + + return size; +} + /** * pci_epf_alloc_space() - allocate memory for the PCI EPF register space * @epf: the EPF device to whom allocate the memory @@ -264,7 +294,6 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t s= ize, 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; dma_addr_t phys_addr; @@ -272,24 +301,11 @@ void *pci_epf_alloc_space(struct pci_epf *epf, size_t= size, enum pci_barno bar, 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; + size =3D pci_epf_get_bar_required_size(epf, size, bar, + epc_features, type); =20 - 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); - } + if (size =3D=3D 0) + return NULL; =20 /* * Allocate enough memory to accommodate the iATU alignment --=20 2.34.1 From nobody Thu Oct 2 14:27:54 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013023.outbound.protection.outlook.com [40.107.162.23]) (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 090EF2C11E2; Mon, 15 Sep 2025 22:23:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.23 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757975011; cv=fail; b=Qx3CzvNw+goCrQwzj/JxvGTtVM3Q2gL3dHeqfDoUXZVdgvrvhvyIO2HwWB33AVxlsdvK8/bLKAYsNXm2tb8D6bgiPH8esdPsU/A4QaJVsVwVnSjvlpg8NtTq38aRWpPoIzFfWAhBPR2oXj2wvLIAf8rNRkg7gbhjmK4pGwLfOL8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757975011; c=relaxed/simple; bh=nB3siptYVPJSuKSLYozqqi4fWc/srEnpTRmYzkDj4ik=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LatPCXZYU+tn6UgSdZrbC4cRAyHVECtRak8kq5cElt5gPed4InrDhXc6g31R26qmD21MmnwgFjYeR6rOIj10EVAdbbmFA/K7glQCjqQV/ih9OYVCcFLr5ssZ+/EYiADaQgE4L6IpOatEad+buKnSOtWqdy9jb4QHdKlpByO35JM= 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=DDTHU8Uu; arc=fail smtp.client-ip=40.107.162.23 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="DDTHU8Uu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pECJ8V3cZuIAXxaoYMAdokIPiutF3wNsPIvrDQ88/Lf+vzS/PegwgcHNqRS91qnrN6sepeMCDZhZhqanVehNFkHmf7noqpMfO4hS/zfAeet0tQCqSqgYkgs6K/c7eyaD800qPocF7D4kP9dKLeTp3fDHpplJwlXvNUr7dHHS1ZT94DlWRcdAn40a5rfsd+e3uy3VnfuxCPrUa/C2pTEy/sy/uSBcR7flivTPNraKULS68qAuNzyftmEL4h20cyw9jY8NQ7b145h3te+YjqZcdwcmUUyKfdxd2yP6EfsCEkhu+zsFs/3GlejeabVnb+D39kuUjSNqPoQQ7VGRxEGfsg== 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=vG6WDTAx+ApF7BPHpES9nyhotZaSHUY0mfputaAS7QQ=; b=PB+El+kyJezTIc4m2Qa8/S9pMupNQuphNMmSjm2aXc4Ykc/T7dZ0MHMRWDYvOGbiWNA50Q/4JEhWrfJHazajfzZDK4Bo08h0tcnYTqqtbVL7nL/I6KMzw82Tju0FcZdvb3c+gCcJZ+/1SmvEYsXRFTHCD2QeE7dnu+lhu+n37D0bVCfJBiRKSwuEsRdKxjTljWCL6xbgt4/Yws3yOnvPL9EBUfplgCXNWFvbF1W4TbzGSP56FS76R7ntbRrp/Nx3hGF7MSxDPpvaNChwRtXe/XSLK2Jxv4Psa7qisv4uQb6gPHSG6Tu4fhkNOtbt5jrFl6+Enrxvpn2kFVzhRIoxmg== 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=vG6WDTAx+ApF7BPHpES9nyhotZaSHUY0mfputaAS7QQ=; b=DDTHU8UuGbHQ0Pif6D//TyVR2O0ZrqgO/briiXiLQNkTQLPVOUHI5To9Me06+Lf3RpumVbnxKmbprjNR9A9eA5PQXzInhlZhp0II9fhhJoSFt1IkHmlqobTU8ukCc5vy2fGW8WUPspz3asm+pUrbrO4mgENxzuJIGLf9xQcwUI+0XjoBxG4jx9Xh1+xEXb2bMqPD2C2p9pgg/w6tArnrPT6XidvZB90Ew3OIPg4+a51zkyvj0HdL8NU7e+vyGeShpYgRC63G8My24HrtTqLlBkl5ogeqM54etESJ+D+J/IwpaLBgTXackSjGYaDfFjbdwwxX81iTBcmzSk6U0ljIWg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9621.eurprd04.prod.outlook.com (2603:10a6:20b:4ff::22) by VI1PR04MB6989.eurprd04.prod.outlook.com (2603:10a6:803:131::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 22:23:18 +0000 Received: from AS4PR04MB9621.eurprd04.prod.outlook.com ([fe80::a84d:82bf:a9ff:171e]) by AS4PR04MB9621.eurprd04.prod.outlook.com ([fe80::a84d:82bf:a9ff:171e%4]) with mapi id 15.20.9137.010; Mon, 15 Sep 2025 22:23:18 +0000 From: Frank Li Date: Mon, 15 Sep 2025 18:22:45 -0400 Subject: [PATCH v2 2/3] PCI: endpoint: Add API pci_epf_set_inbound_space() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250915-vntb_msi_doorbell-v2-2-ca71605e3444@nxp.com> References: <20250915-vntb_msi_doorbell-v2-0-ca71605e3444@nxp.com> In-Reply-To: <20250915-vntb_msi_doorbell-v2-0-ca71605e3444@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=1757974988; l=5006; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=nB3siptYVPJSuKSLYozqqi4fWc/srEnpTRmYzkDj4ik=; b=Bfq03KaTjIHYlFtGzZJdI5hhAEsZkuhu34w/EDrpqYGE90aiwWy1VpbJZ+KGv43Xp03zl5dA+ tmzcrdiSv9XAgwlWcZ9zvgt8X6gmn+i9Dt4MrTkV/CRmjNX66uAJbg6 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR13CA0075.namprd13.prod.outlook.com (2603:10b6:a03:2c4::20) To AS4PR04MB9621.eurprd04.prod.outlook.com (2603:10a6:20b:4ff::22) 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: AS4PR04MB9621:EE_|VI1PR04MB6989:EE_ X-MS-Office365-Filtering-Correlation-Id: 196a4fd8-911f-46b9-062f-08ddf4a678ce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|19092799006|52116014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?b0h6RGFrdndzdnFwV2h5MGdZU2NIZDA4K2FaNGdlQXBjS0NrRm5FYXdJNnZw?= =?utf-8?B?aHRTanJrd0tObXoxc3FXTkUwcVlTNXE1Q0FJZnV4MHhabWdFRGxnUDdkZGFm?= =?utf-8?B?YUprRHhwazc1ZHY5bERpaVNKb0oxbmc1OUxRTkN2YUhrS0ZyNWx6cFgrSWJq?= =?utf-8?B?OXgrMjlySitROURINVVrNElEWktmdDcyZjJFVkFFeXpNYTlVTURDaHBwaExE?= =?utf-8?B?SGdDVjdsYVhIcE1YWDQrd0Q4RUtUS0xlZ09acXJQMkNpbmY2QjE3WDRQdlp3?= =?utf-8?B?bExDcWtBb1IxRFlxZC9GQ0QxdjhlM2c4dlRwcUdEUmpFM0dicnNpWGpYZXh5?= =?utf-8?B?U0RjLzhRVlZicEw4aE9HTTh1NFQvQm9LTEVjTXR5cVhOMkZtQkhqRjRtZ01p?= =?utf-8?B?UTYzV2p2YU9VN05mMEZpL0dJVUZmSFd2QzRjeEZ2U1A0WEJkaXdvS0JHY3lM?= =?utf-8?B?Wm9oNDhkbk9QYmxQZ3MvQzJuK1pDeWNldklnRXNnWVg0TmtoK0djeGZjd3I4?= =?utf-8?B?ditNK25ZK2pCVGJ2Qm5nNnR1YkQzc0hQZHBwc2tXZXE2UXNxU08rdUtmMW50?= =?utf-8?B?Wm9rNnA4WjFkZDFsdDYyakZMMGxocDhXKzAxcGVmQ1NheEpCRmVjN1d1d0ZX?= =?utf-8?B?SXJlZTRoZ3Y5S1gxL3FUYVdVTkpNRmIzU29Kd0ovSWQvZjUyai96eWQrZm1U?= =?utf-8?B?NWtSV1gvNkRUVExOeTBjK1k0ZUpTdFZFY3lVbU04RHJKVlhoVE40RnJiTTlv?= =?utf-8?B?Z1YyUlJKeGUxeU0vZHlXWUpjSWUwZEkrTUZHczFmcnhUcHp6M2FsRWVKaTBG?= =?utf-8?B?K0U5c2JiVVFSdjVJWXJXN0szcmdBVUI5YS9MY01OZTJ1SFJxRW85K29KcWJU?= =?utf-8?B?bHJuT2xYVDFhMVo3YzdzbE5jV0NzczRPajFxb2MwOStDbisycHkxYkI5N3Rn?= =?utf-8?B?cmNhUjBnRkJtVVhzQUFuVktXcHNLWU5PSVdoTnliQzZhRDlzZ3d5bnFLQ29r?= =?utf-8?B?R01kankwenExQnhlZlNLanpBL0hTazZaa2ZVSUZlWUlnUHkzb0FLam1mL1Zh?= =?utf-8?B?UlB0VHFpTXNIWTF3Tytadk9ONlRvbE56WTlMV3NvNDk4Vlk3QkMwbHI0emk3?= =?utf-8?B?VXdXZEIzcU5kQ2RJZXoyNVorUFczalRBUERkNGY1Ym9iQUJxanNkRGdwNE1t?= =?utf-8?B?M1I0UlJiazZiNjJkL2hFeEdLdWtTY3VxME1IWkcyKytnQW9LN3ovdExXM1Js?= =?utf-8?B?dStZOHdHeHp0S0RoY0ZNOHZ0cmdDbTlkMGYrdmh0VXZyUFc1K0NxaXg4Wit5?= =?utf-8?B?SWxBMzFXWTFvMjB2Y0N2RitzOGs2bVNCZUxBT0NSKytpbG40MFp2NjY2SktF?= =?utf-8?B?YXV1ekhCdTk3NU95YnQvY1pPSFBvcGk2UmVob01vYStVclJRS0NKSGRaRXpu?= =?utf-8?B?aHhWd2cwRDRRY1pBVzhsZUNNTTVzb2R0b2pBa1VpaHFjaldsZWk5clRnK3E2?= =?utf-8?B?RTRIOUs5cElTYVM4WmMvcXFoTVlXZ29PVjJiL28yMTNWYjF0empvbHc5OWJR?= =?utf-8?B?RXhTRFdZcU4zOFNONnlxQitQMytDMnNIajV3dzkycW84T3FlNFFGQ29naFVL?= =?utf-8?B?M3Fsb3VnSFZXTHlCUHFXTVpabjI1dzU4TTMrR0dBOEJmNnNML2h4RnR5S1Zm?= =?utf-8?B?SzZqdlFzazRGcGE0TStTL0dVdHBPbVhRaHNZRTBrNUxKeWR1NUNZbG1RSFhT?= =?utf-8?B?VHV4TFB2QjJ6eGpCMytnamtnMXN2Zk8wWER6bC9yTjEranhQQjVtQzh4QjND?= =?utf-8?B?NWx3eXh3WGovVGdNY0tZdm8va1ZnR3VwMXBBam54U3lQcnJONVQvM1Y1NElY?= =?utf-8?B?Z3lFWlcraDM4cHZPc1JhMGQxSEMxRTdvQi9aRDBEVWhwTnVQMEt5NXNldkhU?= =?utf-8?B?R2IxN2h2QnR5d2hNK1NrV1ErZWlYUnlKTUs0ZXhnWDE3M1Bmb0QyWGUzNFJV?= =?utf-8?B?cXRodEUzZ2tBPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9621.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(19092799006)(52116014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZmtGSVI4U1FjZ0dKTGVBdU9CUDZCQmVpa0RLUnB0cEFUNGdUV1JqbzdMc3Mx?= =?utf-8?B?dFZMT1JMdUQ1OWxwM3ZHQ3MyR2RvaUVFMkVCRlZXaHFlcXpkT0dncjlwVUpk?= =?utf-8?B?dktHc2JUb3RJZmpBT2M2VmxEbHhtbTl0SGkrc2lJV0RMZ2F1VkRYQUd0eDBJ?= =?utf-8?B?OEVKRWFqSWd5aHZKYkZ0d29EaFJOdHR6TFp6VHpJSWFudlE5bzJHM2ZRM0tU?= =?utf-8?B?Y2JpL2NNNGVOdGdRWVBuNFVFMlZ6LzYvNWQrZVVlY2pkWStTNTIrSUFuQzZX?= =?utf-8?B?Y3lHc3hVU3VtWHZqM2NwVTlWSjROT2FocHFudGtEOCs5YUlwbGQ4ck9OSnpM?= =?utf-8?B?VW1oNW04cDBaMUUwWjBLU0VBUFkvdlRxaUNwTVlBMTFxamhLUUJsQjZvcUFx?= =?utf-8?B?N0lSSkRyWm5sbU1FUDRRTjIyNXF0cFpCYzkyTmVEY05HdG1YcE4xRk9XSGEz?= =?utf-8?B?R21YcXZSNFVsNlFDeXEwRk82ODJ5ZFJGYXQxZVdxb3R2RFNxUGtMRml3YTBZ?= =?utf-8?B?bDJnNHJDOGl2UjZROFd5UFB4L1gyalRpOVBjbFdieDVTTWM3SXdBeHBzQmhz?= =?utf-8?B?SHMyVE1zOCs0K041NDF0Y0JOc0Q1bUNYQjFCNlFBVCtGZ1lHQXpIZE9kMWpi?= =?utf-8?B?cHU1akhKdStSL0JHNktldEYvWWMvOW5OQ2JrdUhRUWl0TmpNVCtCNk5Db2pI?= =?utf-8?B?cW9GdG9PRTRQbFdBbmlKS0JVTklQMDYwVUxOTzlGeEdMOFFuWS9pbXVzeXlB?= =?utf-8?B?OHlkd2lQTGQxT1lTWFhTNExRL1VYcEEvNlRBV0d5d1IzUzlCUDFrOUMrOWNy?= =?utf-8?B?MHRPQlRuS24rTTd1dmpxZ0RmOW5sbDFucEhwUzFvSlZxM25wRkd6T1hHWHVo?= =?utf-8?B?aG1xSXdSNVQwSXdjSWNoSFVRUXRXTEcyUkZ3djFrS2dxaTF4RGVTU2VuK1Jy?= =?utf-8?B?QnoxV3pSbENIOVdxN3RybU5Ma0tBUHl2SUJhd0dyRTFDNXdaVUozTXNhUGNa?= =?utf-8?B?QWdGK1A5L0YxMnlQbjEwYXVYQlhaRk8wL0hLY0dOR2NleUZPU241bFN5S0xk?= =?utf-8?B?d0oySHVwM3hIcksxNTV0K240Q3hhR2p5UngyY3lWdjZNOWVmMlhXNFNzRUJn?= =?utf-8?B?d3I5bkIrOE01RGhad0tqZHhmQ2t4VFg3OHFTMGNOOTRGV1lTUFVaei8wSnZV?= =?utf-8?B?UUdoRkxQMnkwWWV2N0ZIak45ZEI0VDJaVkVMWFJaRTBsQUpHcDQyUVR4cDl3?= =?utf-8?B?ZUNlWTVDWEd6RmdmTGxxL3NFNzF6NTQzNG8rTGJHbXBKVGllZ1lFN2VGT0Fq?= =?utf-8?B?ZGkvZU8xYWp6alhqUFUxVnM2bzE4VkYzZ0o4NUoxSFBIWDYxYW1zeEQxbVJN?= =?utf-8?B?ZFhtMGJGVlpjVDl0eDI3QmlJLy9rNjBOOFJRUXFHUVliNjNIRHI0amE2czUv?= =?utf-8?B?Tlc2WFpsNi94UmJyR202WXlEUTl2TWlPVGZIQWJQWTJwMzlraWoyV1UzZWpV?= =?utf-8?B?TXI4ZlRrNkNGcTFOeG9taHRZWTh4cEhXMFdHR3htRGdSN0FmbWxGbCtJeUZ3?= =?utf-8?B?Zmw5ZUxvVzBVbDFwM1JQcUY2UittR0lFRld3TVZVeFgrSkNURUh6WnhsVSth?= =?utf-8?B?cDNOZnFsaVQzK0QzTWZIbmg5TloxMWNMbEJVWDE2QnhacVFOekt1TDhwNGI1?= =?utf-8?B?NCtCVzg3S3lqQ0d2Nm1LSFltYVp6T1o3QVltZytON1lseU90M0ZzWnhXV2p6?= =?utf-8?B?NVpEME5wK0JoK1YySE1qQWI0eHdRbGZEeEtEQjR0N0loSFRxRndFSGR2cUJB?= =?utf-8?B?cnlwUXd6Q0ZPTTlaMG12cWxrb2ZhQ0RFWEoyOXNRT3FyVDc3c0NMWkJyNkwy?= =?utf-8?B?RUpEZURtU1JRcnpLNzRqbittRVozeE5sVmtBRWl2VzJIQ012TDdnWUFGVHNj?= =?utf-8?B?NHoxa0szS25YYmpmc1lHTC9pei9rOEtocDBkZ1FlMWRkUVhxd0ljaXRURzBi?= =?utf-8?B?QkFYTWdWZHVXWG1aeXZ3cmJrVkk4TENhdmw4RTJ6LzhMVVlST1d6ZFVXanRz?= =?utf-8?B?VTJTTURRSVVhODQzK2dBbkpIeWx1eDlMQ3F5VjRhZzlaTXpGNGpvb1duaVVJ?= =?utf-8?Q?hvEu6eH+4m0Ww70U5h9a5yNSo?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 196a4fd8-911f-46b9-062f-08ddf4a678ce X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9621.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 22:23:18.7630 (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: B+zQqW3O2w0A3vWHXXZM1L3CWAt2tp9eM+iDM8mRipzorEszZpmAALyAH9Knq2dWkjGqLQ5T/i8tcg5RRSsUvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6989 Add pci_epf_set_inbound_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 v2 - add new API pci_epf_set_inbound_space() - fix bits 8 * size_of(dma_addr_t); --- drivers/pci/endpoint/pci-epf-core.c | 86 +++++++++++++++++++++++++++++++++= ++++ include/linux/pci-epf.h | 6 +++ 2 files changed, 92 insertions(+) diff --git a/drivers/pci/endpoint/pci-epf-core.c b/drivers/pci/endpoint/pci= -epf-core.c index 4281067d4a62da6fbf6c2fb807b0f1b5afd1f45b..cd10e8619d03c7e2ffe48e437b0= aecf0e8a499f4 100644 --- a/drivers/pci/endpoint/pci-epf-core.c +++ b/drivers/pci/endpoint/pci-epf-core.c @@ -344,6 +344,92 @@ 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_set_inbound_space() - set MMIO for the PCI EPF register 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 + * @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. + */ +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, + dma_addr_t inbound_addr) +{ + size_t aligned_size, align =3D epc_features->align; + struct pci_epf_bar *epf_bar; + struct pci_epc *epc; + dma_addr_t up; + int pos; + + if (!size) + return -EINVAL; + + 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. + */ + for (pos =3D 8 * sizeof(dma_addr_t) - 1; pos > 0; pos--) + if ((up ^ inbound_addr) & BIT_ULL(pos)) + break; + + if (pos =3D=3D 8 * sizeof(dma_addr_t) - 1) + return -EINVAL; + + size =3D pci_epf_get_bar_required_size(epf, BIT_ULL(pos + 1), bar, + epc_features, type); + + if (size =3D=3D 0) + return -EINVAL; + + /* + * 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 (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(inbound_addr, aligned_size); + epf_bar[bar].addr =3D NULL; + epf_bar[bar].size =3D size; + epf_bar[bar].aligned_size =3D aligned_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_set_inbound_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..11c08209c27c3f523cca18a1ae8= f1352b8b0c24a 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_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, + 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 Thu Oct 2 14:27:54 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013023.outbound.protection.outlook.com [40.107.162.23]) (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 956A52C11ED; Mon, 15 Sep 2025 22:23:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.23 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757975013; cv=fail; b=O0o2U5hw4KyUwjZOs+mwxjjw33Q/FGDiKX4miYq3VIboCTJNmCJdtYfLr0UJ6Lp+7qYnfvn4NxIejFug2fAfn+8/4tGGgY9om7Fz2cbuMyoOuamKKiXUrrLkBB4U6sjYI4moSEUBjKnoCiimdU8BxZjiAaFt4ElJFpF1lRzHj9k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757975013; c=relaxed/simple; bh=KDkV/uwTOS7GyOmf8JTmSHz0ClMab30crBAE13X1Eo0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=FQSZvlNQY6usJRRRckcYFMHQ1OoU6QfcIb4oukJtPHgkzkcCSGok23+lI/5HqnCOOxezv/pxNt65pAaPLAO1MnegZGd9w4KVvCE6JODEw9pvADMoEmB90BCW/2HkGlltkPgppf4ZOMFJ/gxc5oSzYdiGWD7GfK6lKr6k7jNwE2w= 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=Qj+zMSJh; arc=fail smtp.client-ip=40.107.162.23 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="Qj+zMSJh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iw0yuSzcNQhmGdukgpljUFJOeiKOnkvB4k7ocrMy8kaDQn3Tx6FCCMEc0euXVWchocwZMrsPXM/wBeNL5PhWXNMzkOlgGsFEDTAIZgfDTUpjill9mrYT6Gjd75zzEpv/GuwCBd38onHYLqJdotKAyOHG7R8rkpEw2EDJKnIcXLczs3kRKHK2JoizqB9+/mI/p3x00qMz/7bOgk3Jt86eK0dRghRK1NJiTk0GinGRfn6C5qWC/PvZOeTsh4FoIEdZQcJcrlsKafIq0QZnBe6XMCz60p/BiMYS276nerULYfdm4ij1JPIHl62LrhhdxPE6IExeQGmc12PuKoHFn6e+9w== 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=eF58AR6vlNcV5G8W7sW7MpPI+ua9dHQleS0mHOla6GQ=; b=GVKyZor5VAX3joncSl16q0H1ltPx+eCYuD1Tguem20Pq7i6lUBYuiUdiBOdrVk/LWdDTGKWMjm0hQFiUhJIUSLvrV5wfvfwL0DLZzwfgB3xhXtce4t8EeyxmRsmy4X5HdyTyCEQ2YV4ZzACuDZmmr7Se8s5pOFYleCq56jsuY7uGkt8JCO19eIKXk0+sd5mbfvNkuYfIfZ/O9qatuhxZyZqTF7e1h3EEs91itRIZeDYrHOmcL1fnJYyL5VBJ3Qou8y1zCEMtULXu+3W9T1nWgBDeeuDzgMH/Bdrl7qkeHk58mm9YxQvJGV33ohyEyborIaoDQclq58O9ypXDwjVf4w== 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=eF58AR6vlNcV5G8W7sW7MpPI+ua9dHQleS0mHOla6GQ=; b=Qj+zMSJhwQBXoaQQeEN7pU0uN30NHdXl68/KU205CL7m9evjSivypWdrB2z23DCaMVRqIrs6t45/uAn4N2UZFZrg6A5WMOEdbOCm5artr5j8QvGdw+mXBOX1C1I1f/k+vtjg+pp3f7VjfClbzlo+1zT22APAOYx03CgG1s6UcY8/F5F16HtZpRMSKMzUj3B6U9FZ7ku9LShujMHNmBqt089t3ynf6bn2VcLqqr3ej2ECH8e8JOcjAOdLQoAegT8UFUkCn6bVrrctjE0IP9/Y4W1+E/rGlmBHbhbB6L3kRZW3jjKmYAIK81GjioXrE0FaCG52rRPf0p3hlN62+CMaqg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS4PR04MB9621.eurprd04.prod.outlook.com (2603:10a6:20b:4ff::22) by VI1PR04MB6989.eurprd04.prod.outlook.com (2603:10a6:803:131::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 22:23:26 +0000 Received: from AS4PR04MB9621.eurprd04.prod.outlook.com ([fe80::a84d:82bf:a9ff:171e]) by AS4PR04MB9621.eurprd04.prod.outlook.com ([fe80::a84d:82bf:a9ff:171e%4]) with mapi id 15.20.9137.010; Mon, 15 Sep 2025 22:23:26 +0000 From: Frank Li Date: Mon, 15 Sep 2025 18:22:46 -0400 Subject: [PATCH v2 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: <20250915-vntb_msi_doorbell-v2-3-ca71605e3444@nxp.com> References: <20250915-vntb_msi_doorbell-v2-0-ca71605e3444@nxp.com> In-Reply-To: <20250915-vntb_msi_doorbell-v2-0-ca71605e3444@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=1757974988; l=7424; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=KDkV/uwTOS7GyOmf8JTmSHz0ClMab30crBAE13X1Eo0=; b=0uKk5PswLw/TDxZd16myXX04rRH4/Lk1jypR7DJ6XlWo5TE/m9nlS+sBYCayktWg0mDXBvXaA wkTux3fk2xQB82lSrhoC2kt4kxSJNcMsivpP2RqtHMrlNKcGXQOT/C9 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR13CA0075.namprd13.prod.outlook.com (2603:10b6:a03:2c4::20) To AS4PR04MB9621.eurprd04.prod.outlook.com (2603:10a6:20b:4ff::22) 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: AS4PR04MB9621:EE_|VI1PR04MB6989:EE_ X-MS-Office365-Filtering-Correlation-Id: a892d9ba-950d-4ee0-6591-08ddf4a67b2f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|19092799006|52116014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?TVJnelJuRUY4bkN2bFhvOWc1djh6SE9TR0lBemUwSFRvck1GS3BUWUVXd2di?= =?utf-8?B?NC9hUzBXK0QvV0VReHdHQWlGVHZjUFQvWWc2WXNTck9zV2NGcUNMbWRsSldr?= =?utf-8?B?VS9CMnVaUGpvTHliNlF4V2lLK3M2ejJjVXFHTkluUXQyc0oxQk9JUnVKLzlj?= =?utf-8?B?cmFRNkJ5QkJuU1d6VXRGNTVEazE2U21qN2lsVVYvaWlhaVNqckR0NmJySU1O?= =?utf-8?B?RnhOMzdzTjI2MVo0S0IvbXluaW1QbVZyS0c0Nmw4ZGNpRnR2MEZET2QxRmVB?= =?utf-8?B?ZWt2dEpucW8yU1l5bHJmT015aXd1M0hBMFVOcWRCS0NDd1ZGVThrNmQvM0ZT?= =?utf-8?B?eEk5eCtiOVRhWk9scytuRXppbDZXKzNmeFIwRHZRVlpqWExZVHByZWRnK2lX?= =?utf-8?B?ZzIrOE5mL0pQVE1aY1BaWEdyc1JCNXNHV2hnNDdsN1RrZlVrZFNoMEJpRnV3?= =?utf-8?B?VFl0dUdsN3FQWmhWVUNqcGZVZHdGdEFDbFZMNjhtQ09HazRtR3NleStvVmlr?= =?utf-8?B?am1sQkFiTkpVR3BzUkpIaUs1cnJhSHR4Zkp5Y1B3ckg2amthUDVId2kyb1Vi?= =?utf-8?B?aElQVmZrcGtWLzE1bzJIU2Y0YmFEWHFXSmFRNXplSWlwTXU5SUR4Y0tlNzZJ?= =?utf-8?B?c1d2dWQzR2tKZlVFNjN1ZWZwakluZWx2SUJ1blJYNW9lSWgvQisyRHdXNU55?= =?utf-8?B?azZDMnJaZDF3aDVETUpxa25MdERCZFpncVkwU0lqemVZa1JPeG8zVU1ZNmxL?= =?utf-8?B?bEY3TTREbzN2Tm5FRnBSeHJndlZ1Vmd5UTJIdkljbFVvSk9reWcyYVFWZkp6?= =?utf-8?B?NWdGcVg1eG9vdm5NNUlwTjgzdlYyUUZud1lRR1BCRVc0RlM2RGNrcGtsb3dQ?= =?utf-8?B?aHZickUzSzdSZWl6UDVlZEZYRFBlMkRoOUZLOWV6MEFmQ0hOL3lXSHNUZlpV?= =?utf-8?B?VXRZcFJLbmhwQnZuM2E0UVBTeDZYaEVGN012eC85TDFWMzVEMDUyaXloMmNk?= =?utf-8?B?M0UrcTJPR3RFbVBnL3NUeVlrdFdWZGN4czR5NVp2MStLT3FyNkxXWnlsOGxK?= =?utf-8?B?Mk9vUjNHS0FVVWpOQ1h2STlhZDYwZHF3eWhhd2hBRk5mTWJMQzFFbmtpVnBi?= =?utf-8?B?YkxpTlk4T0dpU0NDdjFNZ3NFYU1CbkJaT1doTVJFYjlpYUdDdVVUckJva3Ri?= =?utf-8?B?cWdaZW9od0o5ek91TzlZd09Edk4rTFlDeWNzR08zZ0lrTnBBaG1MQnVocjJM?= =?utf-8?B?S3ZkdnBJTlRJdyt5Z1U1Yi9IZEk2RmRPaHZNUlp5cTlvZWZmTi9leVU3VFI1?= =?utf-8?B?SHlKYnkxVHlLYllxRGF6SmVDOHBwVkoyclFVcmpja0dYYnZLTWlQZjdPb1Ax?= =?utf-8?B?YXJmcXVsYkdPcmpHaXdabGxxMkJ5UzlZMUZtL1ZsNGdtNVdmZWhXbEoxbmh0?= =?utf-8?B?YklhcUR5R0FLdzlUMG5Xek1pdFpibVVEazkzYmFpZkZrZEIveFFVMnFSYnRp?= =?utf-8?B?OFNGMkU2MndPZGdJWmZ4TWVqK1B6OG9hMGhteUdFNGYrMHRraVNpRHNNaFhX?= =?utf-8?B?VXJqR3dEMVVGbFpGOWtzMzBZRzNyZy9PMTgwUEVaYkJ5aGpDeFhiMmhlUkpr?= =?utf-8?B?TGtWcC9HMVZKS050T2h3RWRRQTdXbXUxZWE2eWtDUmFmZE5DU1MrYTdlNlRI?= =?utf-8?B?Z0tQTzVBeW9rNGNtQ3VjdXhNbm1RRHZObElpVW1Jdm1URzVYeGVWMG1Xem44?= =?utf-8?B?ZVJ6b0tFamp6QUc1d1BkS3FzQlh2UzFRQ0prTEtNc3ovdk5uRmM1MEw5M3RF?= =?utf-8?B?anh4ekMwSFBTZURROTJNUHVZQ2hHaGtRMkpNcWdvWXBDM0dWdmkzaStPMVkv?= =?utf-8?B?MUt1b0lJMWdjYjM2NU13d29QZ3hEbk5IZEJDTzZ0MitlZUw0R2E4N25SdjAv?= =?utf-8?B?bGJ6UUwwU2lidjRiaU1SS0lQVVIzOXBTZXhHVk4rY24zRnNtLzRiWFlwOXJt?= =?utf-8?B?L3pNQ0lxcVBnPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS4PR04MB9621.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(19092799006)(52116014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NGZ1ek1ud2hGeDBzTE1raStUaXBCYXVjZnpzWGloWjBncGpiUXYzcktVcEo4?= =?utf-8?B?b3VCT3IxVFRJTTNqcVdPOHNCOGlVL1FHVlJYeVhRcTVyNFlDQVNLRE92ZEt0?= =?utf-8?B?RFhxa1R5VE1JMjlCamFTYmhsbC81b09mZzBIeUo3OFFWRVVhU0VCekNRRXJr?= =?utf-8?B?T1pMRVYyR0hTcnUzT21aTi8vb0FoZTcyUTF1a2F1RHZmR0FzNVRQeWRwRS9p?= =?utf-8?B?TnhEVE1MUnk3UVpFejlKY3M0MVVKUVhIUkkxNXJsYmkrUGxrSm8wWnZxWGkv?= =?utf-8?B?U001R2JMNjR6TFI1S3lxVVZGNG1lUTJLanhCaHN1V2VVMit3ZXo1T0J6UUQ0?= =?utf-8?B?NGdJM1NwZDhldlJtNWt1QXVKdWhPSnVaWlpLcGtqNldwNDVFSzc2TGJRNEl3?= =?utf-8?B?cUswSE96Rk03SnVXVC8rVzRaUEdvenFpOFFGZ2wrL28zWEMwUjd2MjJxcjVM?= =?utf-8?B?TzhGcnk0N0I3UCtWc1Z2dWI4YnB3YnJQeFJwNFJ0SzRBaGpISTRiUThGU2ow?= =?utf-8?B?M0poMmJCM2llc0xxZmRVbE1udjZDK1hpNEhoVlZaOFlZRlV1SXlPR2R0cGVm?= =?utf-8?B?eGIwSHlFcFd1czBIM1FiZW9mNVpoWmd0UW1tdDFuUkVjSlVzdHFaUENzdDY0?= =?utf-8?B?eVlJS1pwODZMMXh6c0ZGU3liNkhXaDdubkNRdEUxaWxOcEErUktDbVl5bnVD?= =?utf-8?B?QVB5K3BseWRFMk9hTGVSeVFCc3ZZQlVsTEc4anpjZmZGLzhYbWdYbTM1NnJO?= =?utf-8?B?ODlOOEpmZG83VHBlV2ExVm01aEpLMFk4VjVycEZITkgvV3NsY285SkVDamQ3?= =?utf-8?B?OEtweEJYSC9CZzNHejFTL29SMCtOdFpvaDFNUWpDdHhjK0liVnRkZVpPSzhz?= =?utf-8?B?eThMWjRSV3dpaHJGejYxdGpSczZqbXExZ2l1Vk5KU1A4NkRhRWVHaE5nZ0Zq?= =?utf-8?B?aVF6aFRVUy8xejNXc2thd2VndDk1SGMrM25rY0NUc1Q5UWROWW4vbjZRSUhh?= =?utf-8?B?QllhSWRFNzFqV0tiUEFHZk1HQXU4Yk5YOVNlTjhad3VieUVtR3FqMXYzdThJ?= =?utf-8?B?QXM0TXYwbU9YRUxCSkdiWm1SRUFOUWJXQyt2eVNUWG1WM0RsZmdEZk4zSHMw?= =?utf-8?B?VFZyWjROQmZLNUpFeEdIU3dJRit3WGJidDVHRFRNWngzY0ZFblRGenpDbWps?= =?utf-8?B?V0IwRXc0NlMzOUVGUS8wbUJYVit0V3U3S2R1OGRscEZnYkkrdkFLWWRnN01k?= =?utf-8?B?VEIvS01BQ1ZBQjNadFJCT1ZtcklGL2ZJVVhzZGJIRnQ2MWs0MWYxQUhjVmhZ?= =?utf-8?B?K2JzbHFKVWlaOE5IenF5M3F2YjUvdDZzNEhNdmpZbzJDcm9YRjJrV1kyQ0Z4?= =?utf-8?B?YkVFc1dHOGkzczdvZVlub2w4a1NVRWRVTzY2N3c0dlhFc2NrYXlWSEtKTytq?= =?utf-8?B?RDRvTXBhRUJRcmk1aDZFY2tscjNqbmdTcW9VQ0pwOXpWV04rNVN0VWtJd0pT?= =?utf-8?B?VzFQeEQ5TGdSOXhHVHI5V1MwMS9RVFZYNmJxOXNHV2d4TjZ6RUZ3OUd1b0JW?= =?utf-8?B?YlFNTDlST3lSMDg4dys1blpDUGQ5bG84YXhKZEVVSkhDQmZpajBuOSt4ZFlw?= =?utf-8?B?SHYzZitadmFYK2piaGNvc0ljckJQZEx2UU8rQm1QclZUdy9oM3RSS0F1VjM3?= =?utf-8?B?SW1DWGQ3VlIxRlkxSzlVM0cxZWlxUzZreENwUE9LWmJYV0dtZ2s5ZC85eWIy?= =?utf-8?B?WVBjK3NGTG1QTEdGc1ZkWTJyRW5aMllDVXpBaVEvd2FMZUdmN0xoOWpzRXJv?= =?utf-8?B?WnU4eHQyMy9hZXJnSmZOZ1lmdDA5RUxqK0Q0dER1UGtraG5CR0ZpN2s4QllJ?= =?utf-8?B?R2NINVoyTUs1bGphRzhKZzRzWDRObzdPSjQ2UUF1T2VFZW41WTdWaDVGRWQ5?= =?utf-8?B?QVlraXFBYnNuYjNyZjZRcmVLeTc0WTRxL1N0ejhqSmg2bjJrK1c0R3VWSy9u?= =?utf-8?B?ZWFyZ1NXUHhIK3BNZ1I4clVXNkNHYVo2MW9PSzB1MWcxaE54SnJZNVBxNk5Q?= =?utf-8?B?c2VoZi80eVdXRFJ2L0hvajVoeUtwSDhiYnJHQzN2RkZVNmRrOVNzSFgzYVkr?= =?utf-8?Q?m2IwG28TnlS4IwAGa5canj+1+?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a892d9ba-950d-4ee0-6591-08ddf4a67b2f X-MS-Exchange-CrossTenant-AuthSource: AS4PR04MB9621.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 22:23:22.8095 (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: +riC+xAOCPj1EZWLqHgetbRRBgKU3SLmGwwPvAaQu4QsLJem3xnmubaGoXuFoS9/LSCoypjtgHnEj/HkGVOYPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6989 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 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 | 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..06c13f26db1c6e55d23769e98e2= cfd80da693a20 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, 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