From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 DA5813D6693; Fri, 6 Feb 2026 17:26:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398819; cv=fail; b=OBoaiFHVkeoGAssCuBgLqvG71mgxAPXQzgXJAFo79QVdojycfPYTJPNz2Ie7euRMvEiJ1gSzMcB+OMR9Rj6CAVjyX/zc+jwToHKVb21UxIgi7ibNHORaz1h1J3HTTZKZXCfUS2TbzAAfrlwucPn9/Vc2EjS5cI65/2mDl7bg4UU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398819; c=relaxed/simple; bh=iS/pN7ZRy8+Y3qJk2Esl4EBbJtnuyPQgCs2K18eI7Pw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=SgQ0cSh/oh7Op+i/5gO2/eOr6I/unTPaCyYQdAPD8Pmi7vDJ4izr86UoPAoKietaIPR3qf8QOUq6HVe3yibC3GTthH8Rv6dsaFEiZ9LcNKahbjcvKI8p+eHpjvqa/qSpT47b6EqknK7s6yxquYI2zhckS7P0Y1z5Anwy2GtuMlU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=gRo0vvfW; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="gRo0vvfW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P/rVkD4SSEIrwwnsDbmeWsR5PrWrLbB52eOw0NhNxBkitryCGL3WwH9dnDHcVvirQ2SbStxRGfs1kiTH4SPeV0GiG+QrI+PAcOpOIDWN29jYBEduKr4T/An53OLBqSK3ixSPRgVrfJZU82SW0XyS0PLwgFasvbhmmub/UTkYkMunfuZg6hQlwtKEXCDdFrRgEYO6YK6zj1SEZwu7aur1mqo3HeBSZEErsygDk1HebdWlc7t/Mhs9WUjAc8jOjaLIVTSRSDndc2n55rxpm3rRj+bDdtKYP2vg+EIgkqLecgEBjBci2nHHmrrcw3DmF9brAtZATra5iC3Yf6Ah6IPKLg== 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=SnPRhJhOq0+bGdxyR6/yImP1ue7aRrNL+RLbyUJSBHc=; b=N6K7ZsKKs91QnYiSTad11xr44NoLI+ozcd1ThUprMEcCj679WYVummvavYWiPX/8gKmbkrM1RwhH9AqyOUBQBbuHQTPFhbbAybo2o50A+5lawhBRwhNV1CX5HcxMq75T3j7VI3cO2FgCMwTg+8Ob32oCUBqutPWOE9Qw4pb+zEjkMHep3vpzkMqEVFL2rX/QqirniNtE0MJ4a+UAf0SgV1ZyV9P1IhfT9xRlCh1gxivFtLkvaLD7J47txCl3zxcVVadAUT/+BcxAFo8XPKbXK0LNelu2xusG7ybOZ4phkh2rw2nc9hJVxQlkUtmUkbDjGLV8ean4Nm5SASVL6vpNjg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SnPRhJhOq0+bGdxyR6/yImP1ue7aRrNL+RLbyUJSBHc=; b=gRo0vvfWEyTalm6+nMY4bO8mgIMD+a0Fyum4NuI7UaWGlvpMTEfo6OZrXnaBjHCAmNjEUG7twASgH9/cgahZXKsMFG6ROsQ9KTkJMOHa9vbc84w8rHVro4cO/7U6GbwiyymFqItmZnzPGxpJ4sGYKD/peFsPJdgv2PbqdCwrOQI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:54 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:54 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 1/9] dmaengine: dw-edma: Add per-channel interrupt routing control Date: Sat, 7 Feb 2026 02:26:38 +0900 Message-ID: <20260206172646.1556847-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0053.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36b::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: c4f0338a-c054-4e4e-87d1-08de65a4ec3d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?NIGw651rsxeO6GCaf92xsCykSxLMZbM/T2gd7q8CEJYC8tayApz/RFQ21vPe?= =?us-ascii?Q?f1rpw+obMTvURTa0w7NmdT0yGPqFamJbS+aED1Y0K4Txbh2kp8Jpw3d+1OIP?= =?us-ascii?Q?cuj0pSLbKQBPaazOtwYBuLifI4z3lbLYMvugNNWWH+C+1DSu36jY+2jIzaLf?= =?us-ascii?Q?/zAfgYZCIOo7MAk1iY5pivcUIB1MG7HAWX1r0Pnpbkrdw4VfSnMusOU9D+Uq?= =?us-ascii?Q?w0wvNzvseZ4As9dyLXqOtTEf27EHLEF+341K+LfmNQE/0aDoJgtLf1gLKpdM?= =?us-ascii?Q?Nn6DmFQ/oYCEU4+Pa8XSedzP7IjyDZBbtKG35ItOrxXN/N/X8vpHioqXFz3j?= =?us-ascii?Q?KavIVa7ZpJ3bi2Ofz3X10wNVLu3cevfHlcXB1TYdrbWisNZp0SNa2hTeEvcy?= =?us-ascii?Q?SdRV1g4ebOFqneWurAf68Nr70y7MHwCDWUtfE6ZAnhl9RjC618w1tKDPpYPd?= =?us-ascii?Q?I/DTQJs1aAVEjv1c8unh4SRh0dJQSEp/RVhk/al1e2y3BuHtr8hackQjrxg9?= =?us-ascii?Q?RzlKWWQd+Xx0b4uNCRxFcYXFKkCtsfObau0j+0Bmcs/HtyzfNL2shqDqAMce?= =?us-ascii?Q?5TO5rRkk2EA3EfS+0P7G0+DYHOQP9lgK4LbV/ewxZtTqTRBmjrft4fq/AgLY?= =?us-ascii?Q?wPRQ+Jd2Dxyb2e6G2J4yTDoCOrAOYbluuoQ8OIg3aShVNleuYqnB56KzQKRP?= =?us-ascii?Q?pT/JUtozGt5v8bOXf6ZQwnk81hXiOC5uXhBjw60U3eK3On1UuUbabtVuQIPE?= =?us-ascii?Q?MqLS8pS0yOdwmLOTrV8e14ajk94NWW4WZHH/DUbPTcQuJNrnCq06aWeeUyf0?= =?us-ascii?Q?LopU2rKB/8QUed9SEdX0tyLRq79R2TTVab8pFUs/BR0CVl8r7xveWgIKmCOT?= =?us-ascii?Q?T3DftO5d3PgGg1DAZY3DO9U3icNcIukb8zAULXvEUKmJoZcDRGcRQ9jIIvuK?= =?us-ascii?Q?ITIyEi+coVIj0obXN8iJCGO4GwQMtcbXuWZWQ4Pn626dAlU2ZVne0FGfaBHh?= =?us-ascii?Q?HIybCr/O9hOJFLsKqn5UETXhsV5YVFHdih/kdbqVequ26+Qof2iS+8KglKEE?= =?us-ascii?Q?BkL6JVmppXPQ1NZ5S4nFbANuxy6rqvO7QKuQMleSkXqRxCSAtWZrjj7HOGXz?= =?us-ascii?Q?NUAvFbPCfE2ZE9RvmC1b6m91QZW7mfsrxobtxvc8dnIXMP6lcbPZRlemu+ZP?= =?us-ascii?Q?v8gGLHIp83NLBsmQnI+5ascp4m1SppxaCBI56tF7dLWv9A2u0KUmB1D6u7ob?= =?us-ascii?Q?c8pxfab0deCiYVE8Fze6Z61gjsJgJ1USQOOonOmF2VnQp1dZnX5/5OmDGPQf?= =?us-ascii?Q?Pe6wlw/r2k0X/I+IPi6HpnU61YDybGUG6o2snVAdoXA0AnNSnx064EyiHDNF?= =?us-ascii?Q?jKHDwB+YG3jPJQcSwQk5k/C+/DwwcFMflA5fHiwMdExZLkTvhGA4pK3mCUrr?= =?us-ascii?Q?BUiwh8+qPCAHqS+JSY9QwY141uqDtUtkN8H2uzNlkjT58ivHGBHbQP5WdVrD?= =?us-ascii?Q?5CQIbNbxk7IRhQtj7MtMi/WtvttW7hj3p2XXp6Z+b2uqzP/R6nNP53HFGkDa?= =?us-ascii?Q?IiuvrduaCZEJLnSaJhI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9JC+LCl8LcqYN9ddw28E++59+JFFPq3IC61tfFfzRdq2x1dc3ulKMXcm7RJU?= =?us-ascii?Q?zHt/NoWG5tCaYZfXeGJ/5yHlakmt+14L19iVvrU/Klo7hZD10KEXMmTl6Lhu?= =?us-ascii?Q?ip5+tfOOdDesiFz7deubkUTjHSu+/pZpSZelxPtW17j9xkyfBOo4RoqDgJrW?= =?us-ascii?Q?fVg2J/nCYTYt8lQh7ujKPhQ65JDUJB0QsxSi5U+QzQ2IRBtvkw/of+bVsLbD?= =?us-ascii?Q?cfrW7fdY+yQ45IsqpiKt8tBSPEqBnQq+sGCtvla+3j+OeesLiDdU4hLgRc5h?= =?us-ascii?Q?TGyA7QDvx+P2CqMxY+lQefdBjOyExV83JMzpZ18xDHA8v1/tQGEeGSa2JWrN?= =?us-ascii?Q?1cBfSL8ie0luczMcSUWrZyJgKXVIsbUxaimHWkBTF5wF+aogIoLsaT7TujpB?= =?us-ascii?Q?HSorGGZPhoIOfiz9EHpqwgetqOEke973PFRerEVV9j4hzq8COZ3nTzG7gGKz?= =?us-ascii?Q?kt7kQZFueeuFp06GL9xyPKq/W6wyWiJNluUNcNTz45NCc9IDhAZzKb6rXT0f?= =?us-ascii?Q?smQe6pidpkJDuw4hU+nrJ+m+SxpRAqAeBlwEGuS/Dn62Dmdt0wIETxJ2JnDL?= =?us-ascii?Q?976W40Bt92XxmZQo/gONBA/ZJPCn0AiuYPYU1z8ilkrVFfrFeQZSXsZuTn9v?= =?us-ascii?Q?Vxv9DHNjBCRxOGsayGwNoGNscsQ+TXUbHmPk5D1M8fvB4zyojTDwVxi+rWWV?= =?us-ascii?Q?olNyHlBppahP4PoyN9x2Dhz0LOFlMo/385EqiKO8djRm2nAqtehE/u4rBYCZ?= =?us-ascii?Q?nVjL9MzNzGcVL1MlruXDA9FjzwO3Fb8DYW1KAoEKV7UsqNtQ97I+hc/rMi14?= =?us-ascii?Q?1rJpR/rQhz1KnmLSZ64HMdfv/4tJksKPgq271JRr7u3Am1EUfIZAgjj/PEfi?= =?us-ascii?Q?qm8F0HhIJnSw6bxCc+JV+bzREQmrIZHRfNT9NPBF0wF9uvK55T4tNOiYmw2u?= =?us-ascii?Q?8s2Ob+MvQ3ErG++skjl7jVWE5V7vzUlt3czbVW+8mq2AyVWW3mw03h9re2cI?= =?us-ascii?Q?uP+DerL9FfLnphf65wNkL3teRYoYYo/jXYMobJcIKhAG6Mh2JheNo8QkQomm?= =?us-ascii?Q?D93xPa88FYKmnVqIU86poLF35CZleiFdUTqc/Rh1rLSKiJaZLRkRaDGstpXU?= =?us-ascii?Q?eQ+bLYQJv52yohhoQ8hwTYpNgjBUUJiLrsB8iGuaZG7pRIzEZnW+MB1tChb3?= =?us-ascii?Q?lRpYFXxOAAd6GqoYpS/Sx8Gt9z/5M6ZB16NMritHhTwimnE7gd0GXE22EJjH?= =?us-ascii?Q?Xy0+hnPt0qiirnO8vP9Ih/prRwhu85vT8y4vJIGE8BQTRQvOrvWxlaggFK9p?= =?us-ascii?Q?XKEmHWu4EMqexzDfUOy1lANq2H93F3ZFcPEyKAp70zIp/ib15iRLa3Vw+hm+?= =?us-ascii?Q?yGGKlIzReDoVamFQEC9+cFJ/fkyh1DiayMJS9UWqaXWQHqnRcx2RTxRgE5hF?= =?us-ascii?Q?aFfhHV5NCD2sYACID0z72ux7DsUtAwReLNHMwC7caMNMc06PILTY1OaFFLVZ?= =?us-ascii?Q?+wjMlxIkT8r4ebqTx7sYO2djh+kvHdzaHqT71pz5G74X/r281wS3YVLGtooe?= =?us-ascii?Q?8fnLL+xLYsfwCY8F/8fsZpBjH5vgdHRlFA3mnaYdquYjlXzkjPtVMxSdzkep?= =?us-ascii?Q?fUb9wJ3K0hdU/83Ev8uGUeF0P5vPnGJDx+w38wElDg5NOYlNWeQeWr8FLoox?= =?us-ascii?Q?ECeV/QY6ec/kUMf6CagMKRPS/fyzK7cPFgeh5UP3txU3R6ozXnGRxyieu6d5?= =?us-ascii?Q?H6J12K20Q4CO2zWnOlhngV4+ddgOYiyS4pe6FGtxm8++P5wdiNGQ?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c4f0338a-c054-4e4e-87d1-08de65a4ec3d X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:54.6109 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NtclWT4u8GBSFEOzZIr+sfhdiSxrkiqPkEUTigJGU+Vp+pGf1VjQuMruxvWlIs8JW9tlRmmkWN99fDvnJxGpLA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" DesignWare EP eDMA can generate interrupts both locally and remotely (LIE/RIE). Remote eDMA users need to decide, per channel, whether completions should be handled locally, remotely, or both. Unless carefully configured, the endpoint and host would race to ack the interrupt. Introduce a dw_edma_peripheral_config that holds per-channel interrupt routing mode. Update v0 programming so that RIE and local done/abort interrupt masking follow the selected mode. The default mode keeps the original behavior, so unless the new peripheral_config is explicitly used and set, no functional changes. For now, HDMA is not supported for the peripheral_config. Until the support is implemented and validated, explicitly reject it for HDMA to avoid silently misconfiguring interrupt routing. Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- drivers/dma/dw-edma/dw-edma-core.c | 37 +++++++++++++++++++++++++++ drivers/dma/dw-edma/dw-edma-core.h | 13 ++++++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 26 +++++++++++++------ include/linux/dma/edma.h | 28 ++++++++++++++++++++ 4 files changed, 96 insertions(+), 8 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 8e5f7defa6b6..0c3461f9174a 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -219,11 +219,47 @@ static void dw_edma_device_caps(struct dma_chan *dcha= n, } } =20 +static int dw_edma_parse_irq_mode(struct dw_edma_chan *chan, + const struct dma_slave_config *config, + enum dw_edma_ch_irq_mode *mode) +{ + const struct dw_edma_peripheral_config *pcfg; + + /* peripheral_config is optional, default keeps legacy behaviour. */ + *mode =3D DW_EDMA_CH_IRQ_DEFAULT; + if (!config || !config->peripheral_config) + return 0; + + if (chan->dw->chip->mf =3D=3D EDMA_MF_HDMA_NATIVE) + return -EOPNOTSUPP; + + if (config->peripheral_size < sizeof(*pcfg)) + return -EINVAL; + + pcfg =3D config->peripheral_config; + switch (pcfg->irq_mode) { + case DW_EDMA_CH_IRQ_DEFAULT: + case DW_EDMA_CH_IRQ_LOCAL: + case DW_EDMA_CH_IRQ_REMOTE: + *mode =3D pcfg->irq_mode; + return 0; + default: + return -EINVAL; + } +} + static int dw_edma_device_config(struct dma_chan *dchan, struct dma_slave_config *config) { struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); + enum dw_edma_ch_irq_mode mode; + int ret; + + ret =3D dw_edma_parse_irq_mode(chan, config, &mode); + if (ret) + return ret; =20 + chan->irq_mode =3D mode; memcpy(&chan->config, config, sizeof(*config)); chan->configured =3D true; =20 @@ -749,6 +785,7 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) chan->configured =3D false; chan->request =3D EDMA_REQ_NONE; chan->status =3D EDMA_ST_IDLE; + chan->irq_mode =3D DW_EDMA_CH_IRQ_DEFAULT; =20 if (chan->dir =3D=3D EDMA_DIR_WRITE) chan->ll_max =3D (chip->ll_region_wr[chan->id].sz / EDMA_LL_SZ); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 71894b9e0b15..0608b9044a08 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -81,6 +81,8 @@ struct dw_edma_chan { =20 struct msi_msg msi; =20 + enum dw_edma_ch_irq_mode irq_mode; + enum dw_edma_request request; enum dw_edma_status status; u8 configured; @@ -206,4 +208,15 @@ void dw_edma_core_debugfs_on(struct dw_edma *dw) dw->core->debugfs_on(dw); } =20 +static inline +bool dw_edma_core_ch_ignore_irq(struct dw_edma_chan *chan) +{ + struct dw_edma *dw =3D chan->dw; + + if (dw->chip->flags & DW_EDMA_CHIP_LOCAL) + return chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE; + else + return chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_LOCAL; +} + #endif /* _DW_EDMA_CORE_H */ diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index b75fdaffad9a..a0441e8aa3b3 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -256,8 +256,10 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq,= enum dw_edma_dir dir, for_each_set_bit(pos, &val, total) { chan =3D &dw->chan[pos + off]; =20 - dw_edma_v0_core_clear_done_int(chan); - done(chan); + if (!dw_edma_core_ch_ignore_irq(chan)) { + dw_edma_v0_core_clear_done_int(chan); + done(chan); + } =20 ret =3D IRQ_HANDLED; } @@ -267,8 +269,10 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq,= enum dw_edma_dir dir, for_each_set_bit(pos, &val, total) { chan =3D &dw->chan[pos + off]; =20 - dw_edma_v0_core_clear_abort_int(chan); - abort(chan); + if (!dw_edma_core_ch_ignore_irq(chan)) { + dw_edma_v0_core_clear_abort_int(chan); + abort(chan); + } =20 ret =3D IRQ_HANDLED; } @@ -331,7 +335,8 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_= chunk *chunk) j--; if (!j) { control |=3D DW_EDMA_V0_LIE; - if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) && + chan->irq_mode !=3D DW_EDMA_CH_IRQ_LOCAL) control |=3D DW_EDMA_V0_RIE; } =20 @@ -407,10 +412,15 @@ static void dw_edma_v0_core_start(struct dw_edma_chun= k *chunk, bool first) break; } } - /* Interrupt unmask - done, abort */ + /* Interrupt mask/unmask - done, abort */ tmp =3D GET_RW_32(dw, chan->dir, int_mask); - tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); - tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + if (chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE) { + tmp |=3D FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); + tmp |=3D FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + } else { + tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); + tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + } SET_RW_32(dw, chan->dir, int_mask, tmp); /* Linked list error */ tmp =3D GET_RW_32(dw, chan->dir, linked_list_err_en); diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 3080747689f6..53b31a974331 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -60,6 +60,34 @@ enum dw_edma_chip_flags { DW_EDMA_CHIP_LOCAL =3D BIT(0), }; =20 +/* + * enum dw_edma_ch_irq_mode - per-channel interrupt routing control + * @DW_EDMA_CH_IRQ_DEFAULT: LIE=3D1/RIE=3D1, local interrupt unmasked + * @DW_EDMA_CH_IRQ_LOCAL: LIE=3D1/RIE=3D0, local interrupt unmasked + * @DW_EDMA_CH_IRQ_REMOTE: LIE=3D1/RIE=3D1, local interrupt masked + * + * Some implementations require using LIE=3D1/RIE=3D1 with the local inter= rupt + * masked to generate a remote-only interrupt (rather than LIE=3D0/RIE=3D1= ). + * See the DesignWare endpoint databook 5.40, "Hint" below "Figure 8-22 + * Write Interrupt Generation". + */ +enum dw_edma_ch_irq_mode { + DW_EDMA_CH_IRQ_DEFAULT =3D 0, + DW_EDMA_CH_IRQ_LOCAL, + DW_EDMA_CH_IRQ_REMOTE, +}; + +/** + * struct dw_edma_peripheral_config - dw-edma specific slave configuration + * @irq_mode: per-channel interrupt routing control. + * + * Pass this structure via dma_slave_config.peripheral_config and + * dma_slave_config.peripheral_size. + */ +struct dw_edma_peripheral_config { + enum dw_edma_ch_irq_mode irq_mode; +}; + /** * struct dw_edma_chip - representation of DesignWare eDMA controller hard= ware * @dev: struct device of the eDMA controller --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 AD5B73AEF33; Fri, 6 Feb 2026 17:26:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398818; cv=fail; b=SOLtKAoDkxmHHWhs5DIqylfAuKYVVK3cebXrIZjt1NYWpBD6pt9S0p73SVQcjlynoatT+Kr81IQqUdLRaocPDA4XpAtSjmdfwKcXzJ7JggPdNUDScAfss/duY3Q8mvO8za03dBSWSWZE16S/5xF/w63+6SiDMjEyxiTib2knF2A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398818; c=relaxed/simple; bh=uW6z8iDWnzn/cvmgQtkuFjAus4CgkbaZWZHXDPpQGI0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LWrr/mFj+EnLRjf80NnDGkytxYav0Pj9m73HRDdANq1M4j2PbBFo9HLdoCHbHS1U73VS+gsFEFfzn28ZWbVB12fO7KNZwbeD0mVsjHV7KzpNctLl7blHiHUFX36L08X3a1kvB5JLNBVEitEIof212EJloAmbWFG4BF5lOP1IeJc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=qCVDEkXj; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="qCVDEkXj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=svPTtG/ShxWsGBb5AymOvI4tYA92fvrRqMrCI/Yhc6tI4Td0X992r+pHT3giI476YLSJbsqbG3uuzq7j2G1VdWGXwdg/3UEWRV835Eb9NgWCod2CLAhXMi62OhhJCef2S0BknyaigW43nC0Hn5NDwuCgDXAEak7C9UJHr8y1owZjjPQtcQ+mlxmiwwYGNHCSr1m8MRC1OdAeA6AKH8BAV2fytoYm48rEdeOPOmPZswAyxEh+DxKCKvNIncCE1pI6peeyoPfuV2wGYd9wbejkeJ++VQr94Ft/yZL5pxmYrZJTPIemoZTGL1R6BWKUpE9TLw3zyfaG40ONWKpTi2h+pA== 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=TWVjo7akb72UIMUk35QMeuQR4dJioA4EPAXUmizM8Uc=; b=rBgo+InAFxa97l0RCN1mxIuSeWAgHFDz7G89jVdZoLdCosqEuUdZBMD5fW1K+ZLTsQv4gNJZLxbIrlBrZBRV4d5U2F3XbNeleJr6DxvuWYx5V0wwu4W5/wnNQCvlLCTiUuUc4+uJ3qxm6x54Wjg8HEbjB5e6MGupedKUH7iddZSvHDi8QUHV+Wjj9ALIn6Oq02mjKOn3A/wV7AHs47OyQaL+vpTa+JXl0q9rJjQ85K+Tw4LRK57ITQ9relt3Uw/SlaWhK3Or+4yW50xHy//ICpSAXurV2WEVApsHYGchig1B+6JB/NeSOhYznx9xLAIXAj1FqGNVRJGaT0YQcdee/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TWVjo7akb72UIMUk35QMeuQR4dJioA4EPAXUmizM8Uc=; b=qCVDEkXjgU6aPeUtWwDx1ubRQx8Q1MPWp2UHkpESM39k5HBCgP5n6z+wVZkkVW0eCvQhHJurAxtcDz4BDeXINDi1rl7/fBr2+SA6rWO55OClYUNBsdZypLbHC1g7KP83RjWBvMqc3BxPpx38uNPOgvQjeM8+h844S2TXsmlKvAA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:55 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:55 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/9] dmaengine: dw-edma: Deassert emulated interrupts in the IRQ handler Date: Sat, 7 Feb 2026 02:26:39 +0900 Message-ID: <20260206172646.1556847-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0361.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:79::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: ee379e19-f073-48c6-de2e-08de65a4ecb2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Mc1VOD420UkIrUZ4jlDI9LTHjjA8TIp/bdIYh96Uxirit0lvoFhv21xn40/J?= =?us-ascii?Q?5KevjejllikRSkK0uNZ5Qetq+pRSAHknaC/5Ju7NpQFoWbVGHQ/rNZWroT4w?= =?us-ascii?Q?lf4HUNdpuUgl6md4mm83hf/PfRymUqF4so8jTXXZJUDMUmE/GYBh4cGXydwi?= =?us-ascii?Q?zgnUBM/datb26+WnCvyyawe6rrCPwpxdKEipM9jhQqa7Ew0Bqxi8hkr6Ccdg?= =?us-ascii?Q?Y4fisScH5QI1TXxN7SUDP8Gq9PLDScL28E1/Bz8wSwLU1HsAyS2IJ/9wp+j2?= =?us-ascii?Q?PoI8wGLeT68qh38sZLC8AL3UNL3V9EI0RD5lIMc5c2ipsIuMTmCm3qqA8oGf?= =?us-ascii?Q?q6ghqKtxCosEFPEM2AxqXZ4L54AiHckL8J8BcKm74akZLXeR4jdqXmfEBXXr?= =?us-ascii?Q?gFEmUBN9P8ThkPOaR0LNkj6gqFQUfeCWp3hDx1wMd7qJ+YTsaIsZ3RgR6BkS?= =?us-ascii?Q?83b190U92be39NndDLdMbCGscnpqlokGzzJZxuWwBKev0Z0H3YlGxILdxwKF?= =?us-ascii?Q?o9iRq3rSD+PYQukQixF8bcaj2PUYiDYPSIDLqe5DTR6Ijj5n8Qy3SHj8mr9G?= =?us-ascii?Q?k0/xatkF8ow6DMPaB83CI4OKMkcLRABP+kOm8GAFTb2XISeD+mIAy4+i4dEq?= =?us-ascii?Q?fvXQublB1Z0D18E0XFj2M264s8oI71USRHUHtocDiCET0Vi9kX3EkBBjJlei?= =?us-ascii?Q?czmw4EyQIds0qBsEfRj8jBpGT3BrNeGge/JHRtAb+3BpT11rZE58Co4qFWiY?= =?us-ascii?Q?P7lz/sjRq0xJyZusZUaFoXsLmWoLsuwlPhuVTmD8zMWCV04BKznT0ZgOAkba?= =?us-ascii?Q?5ohgix23H7bwl1Sr0/evPDkZXnEdJRuTFD0yOGSndN5d02jimBybsdPhlLt/?= =?us-ascii?Q?fA1p256osenJy3b4ENl1+cmKG9zxC+3HUzQU1xjM4rD2DXXuOum64+nRuDug?= =?us-ascii?Q?ztrgzX8w8C937gPvCXq/KrFnaZlpLpqK44ugvN5X9qyk/uLWybo9cRs9Ka6O?= =?us-ascii?Q?/5LwLqM1lMF/ZiTZ8I+VVhqvUEIZz3LwBCeekq7drghUh79Bno2cDyRTBHDq?= =?us-ascii?Q?ahhwUneihy6/ACopOmkp8o+kUVM8KLXOITF6PwJR27GvXbdd9h9uRPABCFuj?= =?us-ascii?Q?P248l9DfAcXyx6RzgcCZTustMn/fCBIhukf33MJE2LmAea5zSe1Zv2AYDCdY?= =?us-ascii?Q?ny2u3scO6SwxKHHKTWdAb21ZZasjaWyr2h5znY5kmd7tPC9/aKk8CAYE4svH?= =?us-ascii?Q?rflYM27j4bbtJPQ74eGgGTkRAVg8Lrn2ftWkPU9QHeySvJpvzj+VQzm20vNE?= =?us-ascii?Q?EiRVyEzIJe3Osi4Yq1G2Ix6azabiNcrURnA1weq/R3o8m1eDK8clBIq8LaVJ?= =?us-ascii?Q?pQgN2Vw3QRoG4AAIlcjwdT4kAId/IYrtTVqfuQ79VGtwi/mZfJ6v9qrfBNEK?= =?us-ascii?Q?1NaEpgc/5gY/sJyxc5xhBBiSLxDWyUkGfPq4P6XsFSZy9Nya3nNoAZSV7VG5?= =?us-ascii?Q?19qd2humQA+8TMYdfzmjaLxUcRl9/MUHaF49NkE33M7lmi7MphRKFM1dVKsB?= =?us-ascii?Q?WDun4vRs4R7UoNOs8Tc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?o09R/19TXbzqLRvkFsLY12y+rnmNWmG3e9bnHrp8OAQpnMhVM8ru8fo2m9lN?= =?us-ascii?Q?mBnGuncoQDe/UmM7ip1rWoYDpkglEhuP/FkKY88YGDY8Rf/CKTP5gHmceJPG?= =?us-ascii?Q?+JyZBI1R1lpTrCdFMpM3NfW9mUXIqS3KmKZHoysrd/jWRDXP9rbZ+bk86s3U?= =?us-ascii?Q?zfHh4tzmdiel/A33K31mv7DgTfYf10bLOoszr1WCwCuzPji+nsOIHnwAF52y?= =?us-ascii?Q?rDwfHKXV2t/FQKt5Ya2uggnw57TnHRWr+cbF7iHgwEURY4nUO1Ck+9pJZCu7?= =?us-ascii?Q?HwNnwSWRTBzWizPBQPbQhVo8VwDXsSYPpHml7Gwf5Twb+Yn74Q/qGEYvCrQA?= =?us-ascii?Q?2VHl25QyLcs4NqxcG7XBp6XFhZaJviLmXW4IjbLLJbljsVATpQN+Qf3RCM1f?= =?us-ascii?Q?Adw+IACBEHiDouivGtI+0SKcYNosAo1/H2DTAPUajjQ+gNMkkxnFc47YYarl?= =?us-ascii?Q?KrLe6eu1NcCpXdqPCc8RvTxLYsctE4VuaJDgMTTGPTkFTMsYmVIYruHUYP/l?= =?us-ascii?Q?9/X0jJR2XtebxJW8IpLLA1N3x7EmUSFE3lo20tNW/fB9xXNEWuySI4uqM0jq?= =?us-ascii?Q?N9Xc6h4TMqHDuf+P0dGekFW/4ajoE1tmkCBnB1O6/5lBS5sqmCPaaB295X1f?= =?us-ascii?Q?1Cbu7sQXevM7LJBwaW+ziCy6V6e7H56rRXRQ8mK68vZxmv+9JK6X8Baqn2AQ?= =?us-ascii?Q?G6swkKcsXJ+vFY5u32SFgNmJicJHGAXZjt43qZHQj313IAS5pi5f9f4yBMkK?= =?us-ascii?Q?EcSd3mYc7rVFdf0AUKp5VpqjVqJUpGo0LGHsx7ezfoBRTxqSd1uBA3TFq0sx?= =?us-ascii?Q?H9ATOGWfFlGtLZkwbKnBXCfIr3BzkAUE8zlamVBZLWmYojaE3iz3qGCVXory?= =?us-ascii?Q?5QGQy7jC1CXKLu5IjXeZ6DuSJLo+SSPkeUStwopJmNJ8KSfsoWw6x3tG85r6?= =?us-ascii?Q?Ts5jQLNWrjmAJaYMcwzBiPRNYD00Iv89rCiR4zDv9w5xWrC4bjuKFcsuDOGC?= =?us-ascii?Q?fuVUHYohi2UwwVqFLyaq8/5QHhDAdDCq2ipaCvs5FqBQzjjf2z9uMRN7Fkbf?= =?us-ascii?Q?cmdC5IX4eNnJaLe0woMzTsDOgBi2TSRhL7TXLcN7YqxZrOVfmscR2civXwVa?= =?us-ascii?Q?eyHVsmERqU2U0h3OuZf/J1ttC522iSvGlFGvQi4t0x96Ohsg7CkGJekBYehk?= =?us-ascii?Q?6d0iRrZa42wCsan6Tc30OE75gNOWvgLm+/oje8JYVq0GbhcVdWycpr1Dxl9p?= =?us-ascii?Q?MH9mwzN0ziwT8h5DQJ+hwGK4prW7Ipk9w5Vds6sgo3RR4ngNB8h+sYJff5mn?= =?us-ascii?Q?6JigOWMC6NnND3/b5I0u2CK/8ALvwzGnp4ntxjbYYmOTJxts4ZexgargPgNt?= =?us-ascii?Q?TISvqz9Blxx70WPGbTWGcUNap+JbycJFzJjRzSs39c+9wqafq5TcnV0fKVF6?= =?us-ascii?Q?ZdcY62bAgVRrK9uXBzKn0QxJ7NPGwVRoti50BB+sQlkLq6XLCdAKXgPPCMEG?= =?us-ascii?Q?HcZlOG2pVHXCSTp2X0RGT+kqMbJ4iSJs/P/j16sLDoSgnB54qdHBvdITyNek?= =?us-ascii?Q?g/XnkNR06+7/9A/qTB2oOUrRyNTzwbVv+Vjbhnv9wzVs1RdK7v1IY8MMUGRb?= =?us-ascii?Q?dPYBUwZdmvTdERzWyUSM+XwQurwZKq4QZsfjX4rE7pezP3roj4QETGRobAo8?= =?us-ascii?Q?Ymf0+HvCsWzKi94+NN2mvdlZ1vva1R5WNYJ/HA9qPm2PLbc27wonW6d0KZhl?= =?us-ascii?Q?+45rHZZ99BPUDiaPSxCbNR4Yt6uMhr4b4BZpO+6zsVKgKloFJZMN?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: ee379e19-f073-48c6-de2e-08de65a4ecb2 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:55.3768 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NQL/7ZyLfD7MoyaDvnQLKlTuHhVM7Hci9df4YIMfEFj6rU9aPmQwHyG/bSH6ShX+stLRf30hSdqgHrLf3nf+9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Some DesignWare eDMA instances support "interrupt emulation", where a software write can assert the IRQ line without setting the normal DONE/ABORT status bits. With a shared IRQ handler the driver cannot reliably distinguish an emulated interrupt from a real one by only looking at DONE/ABORT status bits. Leaving the emulated IRQ asserted may leave a level-triggered IRQ line permanently asserted. Add a core callback, .ack_selfirq(), to perform the core-specific deassert sequence and call it from the read/write/common IRQ handlers. Note that previously a direct software write could assert the emulated IRQ without DMA activity, leading to the interrupt never getting deasserted. This patch resolves it. For v0, a zero write to INT_CLEAR deasserts the emulated IRQ and is a no-op for real interrupts. HDMA is not tested or verified and is therefore unsupported for now. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 48 ++++++++++++++++++++++++--- drivers/dma/dw-edma/dw-edma-core.h | 11 ++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 11 ++++++ 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 0c3461f9174a..dd01a9aa8ad8 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -699,7 +699,24 @@ static void dw_edma_abort_interrupt(struct dw_edma_cha= n *chan) chan->status =3D EDMA_ST_IDLE; } =20 -static inline irqreturn_t dw_edma_interrupt_write(int irq, void *data) +static inline irqreturn_t dw_edma_interrupt_emulated(void *data) +{ + struct dw_edma_irq *dw_irq =3D data; + struct dw_edma *dw =3D dw_irq->dw; + + /* + * Interrupt emulation may assert the IRQ line without updating the + * normal DONE/ABORT status bits. With a shared IRQ handler we + * cannot reliably detect such events by status registers alone, so + * always perform the core-specific deassert sequence. + */ + if (dw_edma_core_ack_selfirq(dw)) + return IRQ_NONE; + + return IRQ_HANDLED; +} + +static inline irqreturn_t dw_edma_interrupt_write_inner(int irq, void *dat= a) { struct dw_edma_irq *dw_irq =3D data; =20 @@ -708,7 +725,7 @@ static inline irqreturn_t dw_edma_interrupt_write(int i= rq, void *data) dw_edma_abort_interrupt); } =20 -static inline irqreturn_t dw_edma_interrupt_read(int irq, void *data) +static inline irqreturn_t dw_edma_interrupt_read_inner(int irq, void *data) { struct dw_edma_irq *dw_irq =3D data; =20 @@ -717,12 +734,33 @@ static inline irqreturn_t dw_edma_interrupt_read(int = irq, void *data) dw_edma_abort_interrupt); } =20 -static irqreturn_t dw_edma_interrupt_common(int irq, void *data) +static inline irqreturn_t dw_edma_interrupt_write(int irq, void *data) +{ + irqreturn_t ret =3D IRQ_NONE; + + ret |=3D dw_edma_interrupt_write_inner(irq, data); + ret |=3D dw_edma_interrupt_emulated(data); + + return ret; +} + +static inline irqreturn_t dw_edma_interrupt_read(int irq, void *data) +{ + irqreturn_t ret =3D IRQ_NONE; + + ret |=3D dw_edma_interrupt_read_inner(irq, data); + ret |=3D dw_edma_interrupt_emulated(data); + + return ret; +} + +static inline irqreturn_t dw_edma_interrupt_common(int irq, void *data) { irqreturn_t ret =3D IRQ_NONE; =20 - ret |=3D dw_edma_interrupt_write(irq, data); - ret |=3D dw_edma_interrupt_read(irq, data); + ret |=3D dw_edma_interrupt_write_inner(irq, data); + ret |=3D dw_edma_interrupt_read_inner(irq, data); + ret |=3D dw_edma_interrupt_emulated(data); =20 return ret; } diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 0608b9044a08..abc97e375484 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -128,6 +128,7 @@ struct dw_edma_core_ops { void (*start)(struct dw_edma_chunk *chunk, bool first); void (*ch_config)(struct dw_edma_chan *chan); void (*debugfs_on)(struct dw_edma *dw); + void (*ack_selfirq)(struct dw_edma *dw); }; =20 struct dw_edma_sg { @@ -208,6 +209,16 @@ void dw_edma_core_debugfs_on(struct dw_edma *dw) dw->core->debugfs_on(dw); } =20 +static inline +int dw_edma_core_ack_selfirq(struct dw_edma *dw) +{ + if (!dw->core->ack_selfirq) + return -EOPNOTSUPP; + + dw->core->ack_selfirq(dw); + return 0; +} + static inline bool dw_edma_core_ch_ignore_irq(struct dw_edma_chan *chan) { diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index a0441e8aa3b3..68e0d088570d 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -519,6 +519,16 @@ static void dw_edma_v0_core_debugfs_on(struct dw_edma = *dw) dw_edma_v0_debugfs_on(dw); } =20 +static void dw_edma_v0_core_ack_selfirq(struct dw_edma *dw) +{ + /* + * Interrupt emulation may assert the IRQ without setting + * DONE/ABORT status bits. A zero write to INT_CLEAR deasserts the + * emulated IRQ, while being a no-op for real interrupts. + */ + SET_BOTH_32(dw, int_clear, 0); +} + static const struct dw_edma_core_ops dw_edma_v0_core =3D { .off =3D dw_edma_v0_core_off, .ch_count =3D dw_edma_v0_core_ch_count, @@ -527,6 +537,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .start =3D dw_edma_v0_core_start, .ch_config =3D dw_edma_v0_core_ch_config, .debugfs_on =3D dw_edma_v0_core_debugfs_on, + .ack_selfirq =3D dw_edma_v0_core_ack_selfirq, }; =20 void dw_edma_v0_core_register(struct dw_edma *dw) --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 B2C153EFD0F; Fri, 6 Feb 2026 17:26:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398819; cv=fail; b=XAp2cSvA7WWe8CJHIMNwWNWUW/CA/0NGQWnMxGQM3NOoQ3OIlk3OvjkL2BDpDb4BMzImG/H5zQs+/wV+ITkx6pYoXiG5Ma8Q+Nlrc1Nq85dVqeC/Hi8trWy6sqVAl+xygrMZ7mYPrlNxChSYcRonRdPxLvOQ6UoWsjjZ2chSTQw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398819; c=relaxed/simple; bh=5ISnTmFPau8kCE2qDS05W2k68KDC3NHrh+bzC1yCMeE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=O1w7PSW0K9mTwa5qG2UWN0WwM9s6dT5YyDZADmQiXIzofZsxidXAc7xDPOjblsnUsTBLzBbS9IpwqjWKhgBFVvtqmzi+kpvYxnIos4c2uhaOTQg+JkLXBouFZwIb/hPa9WxqiIe7ckvigVP9vJGP/7j80I39UnTqxG40fCtqHCs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=EoSgBFiz; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="EoSgBFiz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VdCUX4F950NIEORRztAfgjishDIy5RpHl0GoGbeITIfdT5700vXoeYP0Nbpvgf/o+JA9Mk6nQ8gvuVUGNKRDIE0hgFKFT2eE/INDTptfUnQ9fyRGGNUcIVvOUjYyZQ8FwRA5DaiuTdpbzXl67VKBzKOVH97Yp/rwnQquX4KAjZccZWrw10rJUZZh5eGpTn9gUlv/OQ3idQLK8YemmL7+iCrv+CgIdOvM3dPG3ntxti76ku9JodmW/vKr5AWejhHUErP6A+jrJz1h0xQS233EVwYNzZg8Hftv2wlH194zjpnmANUDuYpOf7KJZbIMK1c+5UxvC/uOl3fUDiWdJUoj9Q== 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=HuOR9Ml4lxeSjus2aDisIXVXdHENVICOe5j68gTiTFo=; b=YN8Nr2ZnxRBd11vW+Bl1VfCS2NjSPLZ+/NDpF0i7B1OYtvzLtaYXos2Me/tt1aWj6aYNPOistnPfFIz6o/TNDXDiT63tFO2UUVS7yU9hTfhxCrGVbI/u0WuQ3j3Jr63kKEM0YD5QrSMtP2bCoTqYHwofhk0y1OP7gC17mgRbno4CAcN0gE2gOVMzVkA6bBVInG4Ysynpcn6aLa+ZLjdIC0gzj7+H6NQCLYqOClV84NRkZ+m+KOzc+aOoHk6ryzERsvE7JbWgIEJNI6Y+fAkJdRjrGXCQ7TzNfkuIEkNuESwoIY/Wnjp8ayVivYghxUTFEutQEOacfnse3fLkLDzHsw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HuOR9Ml4lxeSjus2aDisIXVXdHENVICOe5j68gTiTFo=; b=EoSgBFiz2iHUG6nEMtf2JdeO72Os5J4rBQY1oFbZNTozrJ/vKU2Z+Lb4Yf9GH3UF2SIfFhU4ICKcka+i6ZDWlXkL0RvETk4y3qH54gH2nMqZWAZfpKx91hnW10fAMYzeUHz5KiXswPUpK0CaklEGEUMeq+0yIPq5d5DqkHjWdY8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:56 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:56 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 3/9] dmaengine: dw-edma: Export per-channel IRQ and doorbell register offset Date: Sat, 7 Feb 2026 02:26:40 +0900 Message-ID: <20260206172646.1556847-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0041.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2be::15) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: a904ef6f-f22d-4f97-b509-08de65a4ed21 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?T6tSRtqlohxTJHR6kU/HMXVLy9EVDe5IkZopGmjkiQNBT4sy+ALWbqUohKqG?= =?us-ascii?Q?BlYK1xTE4EKbuuqtwgOeobvypLObh0zKT1VKzHmsgPANj8vHwv08i4sFytc7?= =?us-ascii?Q?4OcrjT/HoKAqHbE602vMKqR/Nt2AA1nbVOQ7C+n7YaqXdu/JCOXuXqHv4Txe?= =?us-ascii?Q?Y4N1AOUgqZS0xu3Pzotzx3hkm4s6D/Af1720AUfVaEZr7ZnrMiPk2EGTYSj6?= =?us-ascii?Q?MvVKRgoh4EnQ6P4il+oSo1zdJ37MPJ9Gr0BwL/imqu+TsFsC91KtmWsKQsw9?= =?us-ascii?Q?G44I3iWLNiXPuR+tY2VTkVdJFyaM3FXLgxWYpMQ6nvg4EM3lpWEGL57cZm4f?= =?us-ascii?Q?GFu3KuqDn0mfRySnmJhL/IbQ34gcNLHndyr3bVn1QUJ3kVnHGYAgdtiEZQLe?= =?us-ascii?Q?FImxZ3387eX+gOT2fFbVUqql9HcW1E4TKLCjTK7TUqm9/kK9azbb+3B9NC0f?= =?us-ascii?Q?t9l/yPxcn9ywGxDqxOG6tkeHIbfNm7ex5gs+IKQw0wQCo45Oiy1rkpG1HpYz?= =?us-ascii?Q?+bXzbjPpj9iKwuVG76ekVfJmRbEm6IcZa83+AgTar3Im20EIRkHnH1JdQdzZ?= =?us-ascii?Q?e7DE2MaxFkC+k7W2OKlVJm58OZgSzPKyXSv3pBCG8MMpIZf1SXsqgE57n4Fx?= =?us-ascii?Q?FfoAWU4Pt70lZoQc2za3NHs/VUBUBEylbKcEBtOpXYAZr30kCHfYGJgaU6bz?= =?us-ascii?Q?LDT8V6YoQIsivaYIvGg+uDW9Frcvdc6JtXdTvgHL/qD77SKcYO6fi/lIkonr?= =?us-ascii?Q?2V45Fqn8hiKct9kmM0iWQFsLJUe949g0Rqf8bmlW5IdIL2/zWKN48uR4NrfT?= =?us-ascii?Q?9gG/QHBsY2awy+xU65HGnQJBFJxgW5tu83IjgCOngG/zEd/we6fTBTK5iWoT?= =?us-ascii?Q?qFDINRTXPNYWpl1NEOpPNFM6t0Z5dAp8sLQ04mOfNoq3yFAiaepoYun1hlDT?= =?us-ascii?Q?2DQa/AzGVGn4vzuA/OvmSsjtapcWAW4BNOS6FnJa0Rv5ie+7OkKhmVKtGFwC?= =?us-ascii?Q?N6ABiI1ZJycl9cUxckhHi90cihgz+V5BEogc0sk9psxznYkm+fSZUd4mGtIE?= =?us-ascii?Q?RFwFytNHtP2J3XAOz6qnNac+q0QfSQHVOHruH1YoE6cI0UhBadLFqHpLzcZ9?= =?us-ascii?Q?qtYi/ZvMY7IHb8I74EBCvpbK1JICGxM2N7dQr/R/SpWKpEHYZ8yyuisdcTKL?= =?us-ascii?Q?+o15YJmlfPzAiJa7BhRmmP/xZOtbkOe3Aw+afcilqjoPEbPDUYIw09TP5I9m?= =?us-ascii?Q?xTKb1TguJQSqpXIizWKOLeIGDngCdVAvkas1aKU3bRoUYTgWKVuTr/SrJaBR?= =?us-ascii?Q?9US9Q158sNA7aPpYGhoIcj59fGT1IXSpx536nnvp2t1Bb6GqZ6jvLH3qYRrT?= =?us-ascii?Q?g7CKZFKihnOJLhMkSK394S9pTQ9rGk4a4GFe5/42vNXnCAocl09BvRo8EKW8?= =?us-ascii?Q?Yh287mOpHP8fBphV/LO/aWTYA5Dkg9WTdRodL0nmCYiwq5ZlM3FRaUo1D5nO?= =?us-ascii?Q?jhYVF8JjPaYW5A6rTeF/0XTKymKL60U4hHuSlN8foW8I7rZS+j2EqUyn1dbr?= =?us-ascii?Q?hzIO1SgfaqPuTQV4tPw=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rxIRXzweRwrA1onQ1cnYgaJprDn+gUOcP2zskrRYxl2QyjauQbzl8+AoKtSP?= =?us-ascii?Q?0DOSoK1582K2hFXQFcLSbt3Rx/YWAptJ1WDBI/u8sCXJumVWYFzlVv8kCnaZ?= =?us-ascii?Q?uyCLo8u5QX6+MxfMNzYp3qWwEjiWa41gyiiP7aG3qYGGhBe3pbx8yo3+GZOw?= =?us-ascii?Q?mzXV4YNXTJd5o+vRFMMnwd+EMGtyWfqfzkqz11GvCaB4DvLtQFiE+jiUdLqf?= =?us-ascii?Q?LJztn7ds/P4BUue8j4+UWGWkLOrBWnKpVtK1aeCjT36f30o7+Cq0uM8sb1od?= =?us-ascii?Q?i8ifjeTGfUkQXC6uEFpJ+ZcjeTwOtisvaZCvT7H/x3AY7zG3I09Tdlt6ZzqG?= =?us-ascii?Q?UjRJmvq+kPeZ38K2xYCcJ5GqSn7iek+SGYOTZjWIV2AumxcsE8ZqN7ghjmdD?= =?us-ascii?Q?D+ugAWEIJJW4anP26hkjlcVAMi2GDYS+75JbJ5KAYpINUreQgw33IvHaCGUW?= =?us-ascii?Q?A61k7ynO/vTGvTM1bt2K6ARKhd80yBNLbMP5g7s1IlfhOZ9XBrK05zsFOaFR?= =?us-ascii?Q?qJnZXmyS6Xki9UuAlii4uA1UMC0WpbS0bnGSACPazb71PD/z73/N2zb54cCR?= =?us-ascii?Q?MUmvejf9J5fJypYrUrrBXFq5uTpOgvvoyDv/UPRn0HGyHNNKOI4Fv/wOneSq?= =?us-ascii?Q?465n//In11yJJdvE0ssl+8LzX9qoPwhheABs6WCFrKkCGxHVYcfPy031k598?= =?us-ascii?Q?QtTJQjZ99igcKxfAc+fPkSr58WnCCilKQPzmrL7bUPKiQuGBGl6nVwROv4Qc?= =?us-ascii?Q?mMEGDSyJCgj+qx7Z+6gAPKzRmbc6dKfJfSj52Y4neejHMDbQY5m1q2USlLRE?= =?us-ascii?Q?+SVkIW6KMWjm3/J5RqsO8f4RprA+cD4xMDEuqmwMvNvmFNkmv4SOjSZtQUQB?= =?us-ascii?Q?a4gVAhgzf36sKun+TIhKFLAWLzSBaGK8+P9Zt8Z1xJ5vg5GCMS79ClZHfDD0?= =?us-ascii?Q?kl7eMWPIizeYxWgIwtG6v5iRprAaVxNVOG9w/3mEiP6UxLgSgxbsTnM5JQeI?= =?us-ascii?Q?M2acpWAAqwjaPOrjWoh50+NdZLvYjIymw5Gqd9xRhj8cPc7r3s52f7BzkIRi?= =?us-ascii?Q?L3gk746cCMIUnA24qw7R6XwIYC1BO7GFlADGymUaU+5/cF6NPdlPQsEdI1kQ?= =?us-ascii?Q?zdGzNGmD4IrMTLyY+UJJoiFCu53O6h9tj8QPEWRwq1tij+zrRO8mk2qr42Re?= =?us-ascii?Q?qP/V01uE565J1cRgwh+WRsVycCgDmGgcOI9Vq5AIQq6StHAA21CbOXgBHqpB?= =?us-ascii?Q?4SB5H++jpgGKkNxhxJpYa/2uIAWzLVPNJxko95cpohS3+rPiMj9i1OotwSiy?= =?us-ascii?Q?fVSkEDVEhjzdl2c0lOVBOgn2rtJe834qjOnRSuPUcXaw4LoQ02+LKqgPtTdv?= =?us-ascii?Q?5AKRkoqdibgKnwH49aggm7/YLBpRUtWdO7YGp2GaUeKUbFA6UHDCkcCn0rua?= =?us-ascii?Q?xXgpsmZP+B3LNC9UL55SqnNrblXzrip78WYo5+CYrGotC8CbGV2aLdD+lDTI?= =?us-ascii?Q?NR73Soi/BYpjgkVJHxIDPs2F8pTA5KInPzG4J+I3lT/JWjipqL9EI2kNRf7f?= =?us-ascii?Q?rzECkbPJhJn/HZ/JZKWwZLCGMvXN3yK1VRMh/YrrI09sOye8cRSGXNxA1nHD?= =?us-ascii?Q?VFzrl1k5D4W047Wtjma6uEGI9BX6GD9sFIJJtdwFpeEgVZ7oKjBjamWqQvSU?= =?us-ascii?Q?VFmd9yqJFEQLUz8BWMZYnz8KiCYSAdJOP4DV8Pj6JAavXCdg+aUwfsBrveRq?= =?us-ascii?Q?05gSRPxqoxlzxicIH2vZpzyV0P3iuDKiV2rzomeheWtxVhF6J1qr?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a904ef6f-f22d-4f97-b509-08de65a4ed21 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:56.1083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IvvdsY6TsnEo8o5tFYu98/L0BUian5yhO+6QdaZtAib78rGuGspBoNjznxoJxVQjy7vEXMnUGwp2NYGz0ta9lw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Endpoint controller drivers may need to expose or consume eDMA-related resources (e.g. for remote programming or doorbell/self-tests). For that, consumers need a stable way to discover the Linux IRQ used by a given eDMA channel/vector and a register offset suitable for interrupt emulation. Record each channel's IRQ-vector index and store the requested Linux IRQ number. Add a core callback .ch_info() to provide core-specific metadata and implement it for v0. Export dw_edma_chan_info() so that platform drivers can retrieve: - per-channel device name - Linux IRQ number for the channel's interrupt vector - offset of the register used as an emulated-interrupt doorbell within the eDMA register window. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 31 +++++++++++++++++++++++++++ drivers/dma/dw-edma/dw-edma-core.h | 14 ++++++++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 7 ++++++ include/linux/dma/edma.h | 20 +++++++++++++++++ 4 files changed, 72 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index dd01a9aa8ad8..147a5466e4e7 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -842,6 +842,7 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) else pos =3D wr_alloc + chan->id % rd_alloc; =20 + chan->irq_idx =3D pos; irq =3D &dw->irq[pos]; =20 if (chan->dir =3D=3D EDMA_DIR_WRITE) @@ -947,6 +948,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, if (irq_get_msi_desc(irq)) get_cached_msi_msg(irq, &dw->irq[0].msi); =20 + dw->irq[0].irq =3D irq; dw->nr_irqs =3D 1; } else { /* Distribute IRQs equally among all channels */ @@ -973,6 +975,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, =20 if (irq_get_msi_desc(irq)) get_cached_msi_msg(irq, &dw->irq[i].msi); + dw->irq[i].irq =3D irq; } =20 dw->nr_irqs =3D i; @@ -1098,6 +1101,34 @@ int dw_edma_remove(struct dw_edma_chip *chip) } EXPORT_SYMBOL_GPL(dw_edma_remove); =20 +int dw_edma_chan_info(struct dw_edma_chip *chip, unsigned int ch_idx, + struct dw_edma_chan_info *info) +{ + struct dw_edma *dw =3D chip->dw; + struct dw_edma_chan *chan; + struct dma_chan *dchan; + u32 ch_cnt; + int ret; + + if (!chip || !info || !dw) + return -EINVAL; + + ch_cnt =3D dw->wr_ch_cnt + dw->rd_ch_cnt; + if (ch_idx >=3D ch_cnt) + return -EINVAL; + + chan =3D &dw->chan[ch_idx]; + dchan =3D &chan->vc.chan; + + ret =3D dw_edma_core_ch_info(dw, chan, info); + if (ret) + return ret; + + info->irq =3D dw->irq[chan->irq_idx].irq; + return 0; +} +EXPORT_SYMBOL_GPL(dw_edma_chan_info); + MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Synopsys DesignWare eDMA controller core driver"); MODULE_AUTHOR("Gustavo Pimentel "); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index abc97e375484..e92891ed5536 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -82,6 +82,7 @@ struct dw_edma_chan { struct msi_msg msi; =20 enum dw_edma_ch_irq_mode irq_mode; + u32 irq_idx; =20 enum dw_edma_request request; enum dw_edma_status status; @@ -95,6 +96,7 @@ struct dw_edma_irq { u32 wr_mask; u32 rd_mask; struct dw_edma *dw; + int irq; }; =20 struct dw_edma { @@ -129,6 +131,7 @@ struct dw_edma_core_ops { void (*ch_config)(struct dw_edma_chan *chan); void (*debugfs_on)(struct dw_edma *dw); void (*ack_selfirq)(struct dw_edma *dw); + void (*ch_info)(struct dw_edma_chan *chan, struct dw_edma_chan_info *info= ); }; =20 struct dw_edma_sg { @@ -219,6 +222,17 @@ int dw_edma_core_ack_selfirq(struct dw_edma *dw) return 0; } =20 +static inline +int dw_edma_core_ch_info(struct dw_edma *dw, struct dw_edma_chan *chan, + struct dw_edma_chan_info *info) +{ + if (!dw->core->ch_info) + return -EOPNOTSUPP; + + dw->core->ch_info(chan, info); + return 0; +} + static inline bool dw_edma_core_ch_ignore_irq(struct dw_edma_chan *chan) { diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index 68e0d088570d..9c7908a76fff 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -529,6 +529,12 @@ static void dw_edma_v0_core_ack_selfirq(struct dw_edma= *dw) SET_BOTH_32(dw, int_clear, 0); } =20 +static void dw_edma_v0_core_ch_info(struct dw_edma_chan *chan, + struct dw_edma_chan_info *info) +{ + info->db_offset =3D offsetof(struct dw_edma_v0_regs, rd_int_status); +} + static const struct dw_edma_core_ops dw_edma_v0_core =3D { .off =3D dw_edma_v0_core_off, .ch_count =3D dw_edma_v0_core_ch_count, @@ -538,6 +544,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .ch_config =3D dw_edma_v0_core_ch_config, .debugfs_on =3D dw_edma_v0_core_debugfs_on, .ack_selfirq =3D dw_edma_v0_core_ack_selfirq, + .ch_info =3D dw_edma_v0_core_ch_info, }; =20 void dw_edma_v0_core_register(struct dw_edma *dw) diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 53b31a974331..9fd78dc313e5 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -129,10 +129,23 @@ struct dw_edma_chip { struct dw_edma *dw; }; =20 +/** + * struct dw_edma_chan_info - DW eDMA channel metadata + * @irq: Linux IRQ number used by this channel's interrupt vector + * @db_offset: offset within the eDMA register window that can be used as + * an interrupt-emulation doorbell for this channel + */ +struct dw_edma_chan_info { + int irq; + resource_size_t db_offset; +}; + /* Export to the platform drivers */ #if IS_REACHABLE(CONFIG_DW_EDMA) int dw_edma_probe(struct dw_edma_chip *chip); int dw_edma_remove(struct dw_edma_chip *chip); +int dw_edma_chan_info(struct dw_edma_chip *chip, unsigned int ch_idx, + struct dw_edma_chan_info *info); #else static inline int dw_edma_probe(struct dw_edma_chip *chip) { @@ -143,6 +156,13 @@ static inline int dw_edma_remove(struct dw_edma_chip *= chip) { return 0; } + +static inline int dw_edma_chan_info(struct dw_edma_chip *chip, + unsigned int ch_idx, + struct dw_edma_chan_info *info) +{ + return -ENODEV; +} #endif /* CONFIG_DW_EDMA */ =20 #endif /* _DW_EDMA_H */ --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 24CAC40FD89; Fri, 6 Feb 2026 17:27:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398820; cv=fail; b=orDlfFS1x8c+QHhrNeBczU5A7SFIt/NxHOcvdnx7j7jb3aitYRQEkAihc2e8J4GeqMXFWONaRmrAvRq7mVMbefvSEdshh9P4VGTWLYpbqlngNGssdgNHR1Nrn3gzG5aDMhrICR/71GQbLBiu2kee7gzsYuMbLLc0sP2O8zwZcp0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398820; c=relaxed/simple; bh=NG8MUtgi+Z82M5ynmWLRNyGPWtBA66rbgMgrW4mH45Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=E3LuxYlCURdChW3f7q71l7z6PKWagEv4B94xXvhFMgNJb2wLV0OD6WpHlU3ffE5UuFj84nIsYplu3Oi6sfqNAIBxd2nfu857qW/jnMXABG0wSK6E5Nxvofb96SlOgyP3qN81dBCO/wZ4j4obC15Qzk96KYg4KIj/N8rRfw2J078= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=s+i0KRfx; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="s+i0KRfx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NTLdl/mobazsYoAD0KQp5Kk7AByXu2PqbalKCbp7jC24UDpEmnee9T89KpGIbVA0lw8RlKtLaNrM9MpMFpHS6aOdLrKrqOvaGQ2eR0w3U5jUU/zMgN2Jq21OANtq7lotr3W45Rlnv1sPak9k/syLMbFYr+OZoaSn0apd51EHYumbmQ2scnnMHrMAwCBbdLB6Dh1K/A+10qXGyDVxVGi8vqNoWaMEvmZi2Rmy1mgVjO+BC8eXaG8AbUDl30IHSmTFPCXCM6IqWCUb5ezmBRJJbnLPOWPQ6DcriuCYKIYggJ3WRq5Qc+lE6IQDKFVetqOPZ0vyFD/lAKkw6dv3a/LuWg== 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=iwMzAitgI3gaeKehwnCdYVc3sFzOJyu5rJRAVbsPsW8=; b=bAUPqf3g186DVlCSfyg0vyrxLRaYHmk7PB6eMkTwytIULFteDwWpSnUQD56rmySWrRuGeNZIrj+Ld8I1gY3JP0AVI4XagZR36MFMQ+nhYVlnpIto5p+zCsal6srGaxtV3F/H8P0Ac74U7+LF8LKQa106vayH1oNRCFkvHD5GSAy1eyPM8hzzxc0MCGwzdPqYVae7xb+mCLNLq/2z6nyM4t4eRdwbFXzZWGkcyY+SSRxzXzlYz8J0re+l9raWsAVeMbshfckZ3/BMwRfsNdpiI8baM8DZjKmNhQHXmRVO9j37ou3oRzW3rYOih1Aot5Uzfhy8IyvRBnUUY4xujfHYrA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iwMzAitgI3gaeKehwnCdYVc3sFzOJyu5rJRAVbsPsW8=; b=s+i0KRfxj5NRlq3ynE25QGNLk5kY7TZf7o2Tad4WBSvGKJZbgv49TmLV7y6xA/Vx4PKfyYAvXG4pRyc6FwfAIX8E/LTKyh7a5FoKTOYa5H2qEUypny6DAzbfpuJVEBk76vng/8MPMv9miF0sh3sYD79Vke97w3+kEU33qBIqyFk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:56 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:56 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 4/9] PCI: endpoint: Add remote resource query API Date: Sat, 7 Feb 2026 02:26:41 +0900 Message-ID: <20260206172646.1556847-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0052.jpnprd01.prod.outlook.com (2603:1096:405:372::10) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: 62cb6ab7-271c-4744-3698-08de65a4ed94 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?njodKtSvooG7J1vHw6ou5Omg2H2IyQc6k0OiTpatA1gIgsjJAoKi6GppfvmB?= =?us-ascii?Q?YTEhCCUzCVLpKnyhxKZDIPbjkGn4rwV+EJdipsRfJqRJTgEGi2EjDg97bm2s?= =?us-ascii?Q?EQDFEd2i1F0gA0u9np6/w1Fuiof3qYIlMJFVRY6Q6cICZ1DTCPe++bgxi8Ns?= =?us-ascii?Q?qgPCMa5CyJX+NVcEoOf7tE/IjsW6bZNRgwePdHIc4IP/O0qsCCQQf0OxEB1A?= =?us-ascii?Q?BVMH+b72WTJiM6LI+g6uELDWWpW4oOEz9NMcNJl+KOpP5pQOAMOTLgs94GgX?= =?us-ascii?Q?lAkOP/+Gwq01eQVOfgy2Q+1htXcgVrxkjF03FoOJZATH01w5qC8u19iz30Px?= =?us-ascii?Q?4KHeD0AdYfok2wAWMXeo9kEF7tlG03uZebXY+/8A42WF7YBhnO3oCR3bCgar?= =?us-ascii?Q?88YOGyPeK+T03KzNiOc+29/ix+HGzJakM9vJ/lQ6ganOhtFFGkIQI0be3kVE?= =?us-ascii?Q?BngWrZjHwIzrNoAVuIDW+YjoOal30rTVKxCMfysorwrJronydDLZCjql6hpO?= =?us-ascii?Q?3DqeMiD+QWDJ02KduPTqnSilKCUu1BYPyIBU9C/FeflTED1yVpWA0lGCk7st?= =?us-ascii?Q?fvlBx5fguli5l6z1H4cDsAGkEkgGlsWf+ynPVHMZajzHhRnFMIyvHoJR7UK4?= =?us-ascii?Q?/XledwluQI5keKQF5E51nZalZ/PC/D325jt0Y7nl+nJDuBXZDtgmIbf+74ma?= =?us-ascii?Q?y+b+ZcLycgUIYeu3Id8Ds0ea5QokFdpE+efjzgeCjxxDZMk9yVeJ9ig9fOVr?= =?us-ascii?Q?FID2JWjZnMbnQsEUcsyximuoSJFjv9s6+P/O3sw9DVAIu6PEHMNUIjHn85e3?= =?us-ascii?Q?2u7RScZ4sRHKsebl1fyJnjO5pvA1zHlg2iWcrjjU/tGTROhFd6x96Vm78T3b?= =?us-ascii?Q?qi0s03U3HWeL/5jPILPbYQl0NOlLe4zARCInejfsqbN6kYl8ohGKEKnSM1jL?= =?us-ascii?Q?UyftHxY0+tdZ2M0+919ptomskIFoHGfZ4MZTcYWrdRRURK46A/2lppJgUePr?= =?us-ascii?Q?4Yw+5WJLIbYq0m5X0DkRGcF6lxizWelprR5vMrXdffZEsmVxLdfQVDCLX13R?= =?us-ascii?Q?eJFF2U5qC/HzwxtNOkp8WX5HNpgy5KVzySfgSN2rFkv7jEBxv3IQB+aL5ETh?= =?us-ascii?Q?r+uopabVE4V1T0IB086GjyJ8t++iOofy7Pl7/xqNVViy37FBTim7eBv2mxZ7?= =?us-ascii?Q?TwVe33BLxGLkxnmbrY/ckpoNXrgAAaMG8CXDTuXwXUMLxM1WsiHVQlBodXCj?= =?us-ascii?Q?eMO+C/EeZj6l40rLAb8HZd6GxIhkTTNEoZmV3LWKBLCL3+N0HEKZOqf/Yzzt?= =?us-ascii?Q?568TkgnnOAWFZiSJHtx1CLfmWNZ5XEjiHKnAau+2/xzIt0hkh9jdsia6rGRA?= =?us-ascii?Q?+DSZY6brso2f6NqTzuCPvlJUismpY3Op894rF5crtkQ4Hp8sKio+Or5IXR5o?= =?us-ascii?Q?YcwQS3IzXVcpE81SCQUz0rc7SGhC+dPfXy9bE+Zownk2kx7qAFU9zYvxS9Rl?= =?us-ascii?Q?We/wWdx7V/8Z/seu62UOlsAGc6hAPnHONPirBzKfhyAM7y7Jehk/2E0AgRvi?= =?us-ascii?Q?buCAsel3Kx/xuHIxjeo=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oQPKdG0GLoXbSuSq/ol6ETaaqKSNHmKpmvRLZ/7iykgO+D2PNSP5S+TGkyj1?= =?us-ascii?Q?hU2qr1U/qAbUUEynBHsexuczPuPK2cv+ul1iQjwj2HyshAAR3FeVK1gD5cbY?= =?us-ascii?Q?Dazh33fR2yH809Jvvu8ntP0FEuK1LnilQLJGM+phkYJyInrB3npOv3fs4jop?= =?us-ascii?Q?DsSe/3OURsrM1dHQk9kNbOdMUEwYpMhz2TUrQDLVHlYNUex/6bP0Cv457OFi?= =?us-ascii?Q?UdeQtLknubUli+U35Gy/rvy5gvr/5Gs/0kAZ4/HYougLEcX9vD5JyLdugcwR?= =?us-ascii?Q?4oTbrOG/k0TzFKSx+CmyTPpZni5SGyYQYccTMlUQxva7ADDM4rVTM/n2jICk?= =?us-ascii?Q?Uy+W40/xayPPSIvUtdrkMOAlvjldJLIV7oIfndzHtMGMGBGOqEhIX/SrUg3P?= =?us-ascii?Q?2en/WBJWd3eWHw1+bziEqR0dWACz0CVUpQs9Hg+oOwo/0VdeYo0xfQotPppD?= =?us-ascii?Q?+Ps4L86gQ1OKmcQ0Jyaq0JYY/0hVF65qiQQjQSn08udE1uCxX4ssR9mIko98?= =?us-ascii?Q?bUXvKElE0tEQ6KwxyB8zpVAwVXRPbUp1SGG3lDdYUskspBi0VI+9YuxZ2KNd?= =?us-ascii?Q?qnT0usyxJd1ioKelA5fstJ9wnEjP2hrKckGIuYqJ2jYW4wi1ojkUBIizrLzx?= =?us-ascii?Q?qC8bTN3owZ4ihKeHBxcjL46vUu+7KnYsBWP3H8Rr7wX31EhBel4cLygrfGqD?= =?us-ascii?Q?NMpp3Qf+K19ShctfSffWVa8Qn0FkbfC1mDRHw9Iumfw0LCbk3fCqHnGO6PS8?= =?us-ascii?Q?IaeLphVzTsFAMsuniS3FiUZCppAuG1M/ymTrndN0X6/wOPAX5nlhsSJ098aX?= =?us-ascii?Q?5XbRfAlfahWY84deP9l7APiukjP671FON0LouMfmoS1BUPsK2mA+vggAAB2T?= =?us-ascii?Q?5rCMIjAoEjCqVeL1wJAUQzfMFEA5j2RhjdEZ+Y85bOpErPPZwwvoiFCam/E/?= =?us-ascii?Q?RWMqFufhD5dwSKE6c0QfhzKVSIQB3e5WueSFjA4AsFnNYfkvoQ/PTiGFHyrl?= =?us-ascii?Q?942O1XhSyVdXzuSCgTM8eDB2YsG1k1zlhFua88DtStQrN26fp7+RWsLVk9Lr?= =?us-ascii?Q?To990BQUiGhAeooK9NYKKAVjIMDZyfyCM3WY3KWcXzFFUxKYvGeIsVzZKOQE?= =?us-ascii?Q?3lugGdchzmKsG3wGNSJp87twIetNjH2kCzV3bFChkh0NacYV6yKr8OezLOX0?= =?us-ascii?Q?Fb8npSmeb84dOyAtjkZpC4BSwiLkTLR65zkX6v2pOgxUMP0w0l/uipW8SJB7?= =?us-ascii?Q?a3m//OVevnVMq7N9YqqBeUgFlp50pNnqCppe1YB1Yn+CP6p6uJk04skWTD77?= =?us-ascii?Q?HggxcncmQFOgNn1huY6Jas61Z2pXCscgRrLNm3zaE60g6521ljha+5jvqobZ?= =?us-ascii?Q?J/mab3vU/KBJyTe+OdQpmuZx5g5j5RaAe5wPgMLnI0JLiuO2D1sPMcMurIRM?= =?us-ascii?Q?W7hOlfVePd/9jScWEfdMFEvwY6SN795txCT+f+L2HYEvXkmntWCvkfiGQ5qk?= =?us-ascii?Q?MhkwzGo0Q9+gOwaJVj6HRcqCfnm9P4cL3R5yPADfCNyeMOV3eMFPTRS3FvM9?= =?us-ascii?Q?YVemjLSZT8xP4RoMTDzEOkl/kXtREpY6jZnNWQmdnNunSZRT2INcLUA0IAfh?= =?us-ascii?Q?3TRHhY66Xt95b3Hr3xxOWnkDhLW3nj0uhE7WSplG5MGkH2YXzbEIznGPUDsU?= =?us-ascii?Q?Xr1RWbaVY/BnUboPiFho3JFtAUepnZ58ReRkDPW6LOlhu6k/gulqahNXyNdJ?= =?us-ascii?Q?JzYxSTN5Vi4Aju7jxlG/BPcx8tv2g6SmqWYmh8BmVwca+iILNsXk?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 62cb6ab7-271c-4744-3698-08de65a4ed94 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:56.8556 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JqVM/UgBE7hYmHdKnFx4aZmWqFhkNK9RJybcPjlNyR/8NR85mUQXQgoJsX6m8Y3lt2YA5l+ndokw/h2MAqOWgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Endpoint controller drivers may integrate auxiliary blocks (e.g. DMA engines) whose register windows and descriptor memories metadata need to be exposed to a remote peer. Endpoint function drivers need a generic way to discover such resources without hard-coding controller-specific helpers. Add pci_epc_get_remote_resources() and the corresponding pci_epc_ops get_remote_resources() callback. The API returns a list of resources described by type, physical address and size, plus type-specific metadata. Passing resources =3D=3D NULL (or num_resources =3D=3D 0) returns the requi= red number of entries. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/pci-epc-core.c | 41 +++++++++++++++++++++++++ include/linux/pci-epc.h | 46 +++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 068155819c57..fa161113e24c 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -155,6 +155,47 @@ const struct pci_epc_features *pci_epc_get_features(st= ruct pci_epc *epc, } EXPORT_SYMBOL_GPL(pci_epc_get_features); =20 +/** + * pci_epc_get_remote_resources() - query EPC-provided remote resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * @resources: output array (may be NULL to query required count) + * @num_resources: size of @resources array in entries (0 when querying co= unt) + * + * Some EPC backends integrate auxiliary blocks (e.g. DMA engines) whose c= ontrol + * registers and/or descriptor memories can be exposed to the host by mapp= ing + * them into BAR space. This helper queries the backend for such resources. + * + * Return: + * * >=3D 0: number of resources returned (or required, if @resources is= NULL) + * * -EOPNOTSUPP: backend does not support remote resource queries + * * other -errno on failure + */ +int pci_epc_get_remote_resources(struct pci_epc *epc, u8 func_no, u8 vfunc= _no, + struct pci_epc_remote_resource *resources, + int num_resources) +{ + int ret; + + if (!epc || !epc->ops) + return -EINVAL; + + if (func_no >=3D epc->max_functions) + return -EINVAL; + + if (!epc->ops->get_remote_resources) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + ret =3D epc->ops->get_remote_resources(epc, func_no, vfunc_no, + resources, num_resources); + mutex_unlock(&epc->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_epc_get_remote_resources); + /** * pci_epc_stop() - stop the PCI link * @epc: the link of the EPC device that has to be stopped diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index c021c7af175f..7d2fce9f3a63 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,44 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_remote_resource_type - remote resource type identifiers + * @PCI_EPC_RR_DMA_CTRL_MMIO: Integrated DMA controller register window (M= MIO) + * @PCI_EPC_RR_DMA_CHAN_DESC: Per-channel DMA descriptor + * + * EPC backends may expose auxiliary blocks (e.g. DMA engines) by mapping = their + * register windows and descriptor memories into BAR space. This enum + * identifies the type of each exposable resource. + */ +enum pci_epc_remote_resource_type { + PCI_EPC_RR_DMA_CTRL_MMIO, + PCI_EPC_RR_DMA_CHAN_DESC, +}; + +/** + * struct pci_epc_remote_resource - a physical resource that can be exposed + * @type: resource type, see enum pci_epc_remote_resource_type + * @phys_addr: physical base address of the resource + * @size: size of the resource in bytes + * @u: type-specific metadata + * + * For @PCI_EPC_RR_DMA_CHAN_DESC, @u.dma_chan_desc provides per-channel + * information. + */ +struct pci_epc_remote_resource { + enum pci_epc_remote_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + + union { + /* PCI_EPC_RR_DMA_CHAN_DESC */ + struct { + int irq; + resource_size_t db_offset; + } dma_chan_desc; + } u; +}; + /** * struct pci_epc_ops - set of function pointers for performing EPC operat= ions * @write_header: ops to populate configuration space header @@ -84,6 +122,8 @@ struct pci_epc_map { * @start: ops to start the PCI link * @stop: ops to stop the PCI link * @get_features: ops to get the features supported by the EPC + * @get_remote_resources: ops to retrieve controller-owned resources that = can be + * exposed to the remote host (optional) * @owner: the module owner containing the ops */ struct pci_epc_ops { @@ -115,6 +155,9 @@ struct pci_epc_ops { void (*stop)(struct pci_epc *epc); const struct pci_epc_features* (*get_features)(struct pci_epc *epc, u8 func_no, u8 vfunc_no); + int (*get_remote_resources)(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_remote_resource *resources, + int num_resources); struct module *owner; }; =20 @@ -309,6 +352,9 @@ int pci_epc_start(struct pci_epc *epc); void pci_epc_stop(struct pci_epc *epc); const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc, u8 func_no, u8 vfunc_no); +int pci_epc_get_remote_resources(struct pci_epc *epc, u8 func_no, u8 vfunc= _no, + struct pci_epc_remote_resource *resources, + int num_resources); enum pci_barno pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features); enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 A1B1441C2ED; Fri, 6 Feb 2026 17:27:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398820; cv=fail; b=G/2sCg3X56XOwtstSgUYUvD36V64/gCeuMVnCbD3uHEFmiABVfcn5BSi36KnP3mNdnwMz3tulTPhJtDK7o6V3AmsVqrgeZuL7ESvpNoC2NcYmlhN7NeR69mCuZUpTtNWqpuop2tUQBF0Q7U9vtulLO/pA8+EO+kgVde3meBSaT0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398820; c=relaxed/simple; bh=fTx60twlm8eOQQ0LDmn/cde81YfV1ISdp2/yz1EnxUQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Td1nhcEOJDB5VQk8SIHnTrKE9qQyQRzBN9yOzSSx7BL4wzs0/2ABWyp71imACf9a4iSU81OvTwzRRqOZsgticONXD3nwK76KfAaXtreLPUOIrkwHIJM4psM1k47aDeV1HNYLi20ncss0vyre054zrYoPn9N9/O5tVqBQuFLxkEE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=bbbMZJaQ; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="bbbMZJaQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yVZ2c0TpMW3jVHjGKHdOGOMm88NNRNJ8BQJ9KR7HeEAZ/l2Cyh6nKD/X8ox0jYhEmQcWMf/JmkA/nLwmfRW49aAViRy6s2HkazKNIafQffbO5pEx355v0qhubooDzG4l/iIxIlUJtyHPG3Qv6/FTYh09ceQL5Ugcl3N/SYET3jLne22LjZ5HtmxmOXFWMA0QFl+YhDhxMXMp+G4VCcstEhpCH9mwLd8rCaHr1ycEmsgA2DmGAovuIl3nNwWJ5ITlkr+oKwHNVhPuA49Z8QhWF+u4b6tSfMefEZQvvGXTSVjLEKueuRmN67tkswz5DTxq4noZeklID2fgfBpFXZMc9A== 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=v8yWAfV8AJ5pPwl+Js3pT03l2aqXPjl9XVUFCNdR+xA=; b=uQhmarVL7ZSQsnghaT459fKWnjrW5Fs3g77UxO6YafQjJxHsfHB4afZ1l8By+bl1yaaF4fKsyBKnvNMiX3FSZcQwZIjWTMOT+qf3cHpF1JvuEewrS/6uCmhgdGTD2Ejw1b50jJsOpthf51y+2RwZc9UL8RVEMHUHQ7j8qW0BH/7z+9ZydrGBAa4iEV09wJ+yDe8ZhEVjqCcwCT2eSAblS6sOLPWQ4QpQdNOgNok8F8rVj7iILERdENZ5gFJOT4Oa0+quW6FqpNZ/TKhwfGL90pIIV7kv/fi+PoMZf4NwezsgBQ3aAEuEisKEL4aEqeMsqH/T22FJ0NbUSOs+zfXPHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v8yWAfV8AJ5pPwl+Js3pT03l2aqXPjl9XVUFCNdR+xA=; b=bbbMZJaQbAHuKMDJe7TAeGlYzQXENX/uTmQWjwzp+j9vtq16pd9Ta+RNRtrV3GsCokrf7cFD55z660JFR/Q4iu6bs7shg4pL75uW4VIktrvS7jid4+exQowy1RKUODzY9dDkwuMMbLhmk3/m1dJW1bGCdCfXDWGycQ1itdva1os= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:57 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:57 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 5/9] PCI: dwc: Record integrated eDMA register window Date: Sat, 7 Feb 2026 02:26:42 +0900 Message-ID: <20260206172646.1556847-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0048.jpnprd01.prod.outlook.com (2603:1096:405:372::13) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: 78f095db-32bb-4110-9b24-08de65a4ee04 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?NU2Nd65nPlf0AdBzolrcZbJscX+aKZPUh2wWSsSMFVe60arrpJYuMuq5tuaR?= =?us-ascii?Q?kIcybBsBtwv7EaqDKZ8c8hAA6pOEKexmeWIga2KLDg+7+7sNqE4sESk9CmDh?= =?us-ascii?Q?QdeqQs3yWn/Mp8yG1/vcpPlUDNzHJP+EQrgQzMDGMjesOc0CDW8+h/Zv3KAj?= =?us-ascii?Q?ZQH6V7b8zPparl4TSn0JH4nPzkvt3pLSQsBifcGzqr0oMr+m1wLra2VYMW6o?= =?us-ascii?Q?7A6OVn7FE1ZvsA4yJMTP33prLvhnkW6I+1nFV+jF5Jm+IWUHdeuaqjJJdAeF?= =?us-ascii?Q?oXR+OmZnXlTzHznmgmNbjo5I0usc1mTuX18JDY1XwrcsIaRJXaKrRK2Tdc/F?= =?us-ascii?Q?rrjJiug3UwdzDlAwBmgj9PexO+BWoihv3IjL/ZDRiBwOLQWova4hEio4SQUU?= =?us-ascii?Q?oKII2dHmXrUIAYJ3ruYPOYB+Irm5hQSF7ouGzeCTBSmlJq0T6BltMCA7bDkp?= =?us-ascii?Q?jQJ3hqrBdE+fqhLvhzKV+TrSO9st5faBaFMMSeiy4Gp5PvPi3jmbZOWv9cE7?= =?us-ascii?Q?HdzYNs1gMeBGtebQAzq5Kjfp6DuiDzqcfX/U9wX6CI1klf5EI8fEqRQTLEjK?= =?us-ascii?Q?8TrIIQl4NjrmVoUCwIt3c/YcxPvveYBsWFTsO12dVsvmaXX/et6w70U6DJs8?= =?us-ascii?Q?A0zbnTnLthqR2pGSciWvs+8T893pHuaYip5YuvMS3BIn8QTU6AsUISq93rdY?= =?us-ascii?Q?i44Cua0U4wQrXFcvZlKtFEpn4YWQDT01k6k2/Mr8yLF5VLOvyl5ewQRgmF7q?= =?us-ascii?Q?aH6mbqlOk45kMk9FhrM5DyjqC9mdnRIMDeFNPmng7/DYLGw6c7ccRDaB/nCp?= =?us-ascii?Q?PophNwZo28hAbTUk0xG/Ha3NXdcLcDHXqScn04JIHBwQcuRfKU9IEXgoUkkV?= =?us-ascii?Q?q7sNHVFHALkbXiQpu4STg/9JGo4ANHCCAqULwiLgHaFx5keRN9hfyySlJQ4r?= =?us-ascii?Q?t+tXDO2pT5TXtMEc8tLwLEh5HHC/k+nmwD4i8KrbEqFL7bVJN6GnCXVryijY?= =?us-ascii?Q?SqLpEFjmd3BvUy+D5bRQ0bOEs/zWaqepGugOO8lrhYIqNUY0kNhRUUgP6o/E?= =?us-ascii?Q?Gx5pny7I/gAmGwubMX3aU7kmZQvGa8/9uoGRhxnZf+oL9swLOgguhu6q6WDJ?= =?us-ascii?Q?HsRT8w1N1agd21Y+OswLYquAWogOdE95KAPLMQDfghQHBZqh+sz8M3YY1wWN?= =?us-ascii?Q?aoCncZpZtMB/MgX5QpPEUmlBRHpVR7wiBQ95A+AKvhLAjXw5WXzptz+20dTV?= =?us-ascii?Q?mCpyikdp5D7ckPAQlnT6AYDu4uH2JlVRefVFhBR9EfmC/L2o0xYwiSOB45r5?= =?us-ascii?Q?SyCCfURScOgKbPar3L5itAZkgOH4T8lj6mwIyziBFRP7vcqwz8lLtbZNCI3S?= =?us-ascii?Q?/76e1ndhf8fk17jinKvoyxNq1YjDz2MtptuU4SGNEy99O73GaEex3875OHL/?= =?us-ascii?Q?oLRjk7awCLKr9dSAIBcy5xLvp272yzPknmUnlq5Km0bliht7gVT5Up35ERg5?= =?us-ascii?Q?wNi3osHx3dDlFFdWu+pywQyJxrUDpUlcUqxkl85eXL48GX3Jd/DiqoyynxQK?= =?us-ascii?Q?/aiV682fb4475Ir0ayQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?g9O37bxtrBVnyFqKQAphKCW/r4neeCJmWnbTYvG2ug0/KQJ2gTUaXwTCU2J1?= =?us-ascii?Q?55gCfURaQgEwVl2lJLADrG5X0Fe2pAnoIx6XNWrYPPH/6UVJeWbUR+rVLqm0?= =?us-ascii?Q?atJiejGKwIK3bK6k03C0O6eDeF9SJr+bAGOq10Nb+PwgE7gmefHCPXsC7IXc?= =?us-ascii?Q?KNC0KVuzzOjVeZm/b7oqMeH6/8ClRc/W5zGpLpFCBZW25dhk44I+U8aVmJm8?= =?us-ascii?Q?1CVCjkcEPB6DdRHGYY5KrNg3u2/45jnPEm8hW1ME8G2QnIWITzG2qrrOKAhB?= =?us-ascii?Q?19hrSRcNrtWC0v+zVJnYbBfYHiHrSZO4BlyqhPxYwV9Z/r4nyShSnESSFM9J?= =?us-ascii?Q?9sJXQ/QfolQnNJgFYFn5Llzix2x2ISCxNk5mj409FefZxmnBO8bRTFTMxR61?= =?us-ascii?Q?YtXeE88Np2Pjk5pyMQ1Wwr+XEC7CQ8PtO4ngoKzZsLzVRWfDSf8yQDPDDj6B?= =?us-ascii?Q?0rdjcTTXzmm5Vl16V6bpDOn4/MYOBEdP5fuRSLeQV3jf6xQtUQUHPuV947Wi?= =?us-ascii?Q?TlKGfcEP9h1zsim5hB+rFi0T5pAxhN0TgnmW8i1xsPQ+eqsYmKddS6DkEolT?= =?us-ascii?Q?gd4LO45ENCy7CTdTUGks/7SG5GmwEcGXkU6VXKo5GbjH8qF4pyIrZKkf9xmw?= =?us-ascii?Q?NywRhJR7kYzm6Cc7A+0+VyNXOn0s7/y/pHfT4wQUvbU9MUfdEy9+lsjnJoM8?= =?us-ascii?Q?8DT9ZnjNku/hIdqhipAxCPOfzvwIZ988XO+8EJml0WAijqoFZxS0i8HygCX5?= =?us-ascii?Q?lLQgOH83I1NAx4P4D+mXrZh6Mkjvja+ysKUdWL2RTkkaGH74YQ4tL3Ru24H+?= =?us-ascii?Q?9/Mr9YT3Ja9wtyRVmYwUmdNwvlQnR8NhXwF7gxln+g0/3lJ+gvyRGGO7g55o?= =?us-ascii?Q?cXTirnVappvo/vxH/LlkIamncyywtaRIyOniIjItip6GfBVMDkznrVWs0wxp?= =?us-ascii?Q?aRqkj0vqQKpujRqkhP6en8yqBNVlxHyEkmhNVWiR7EJkSgiuOU19gMYfJbEX?= =?us-ascii?Q?zgPuGzNWESSZ/YIuxR19XR6X8xqtZdhZe7oDcqcTUu3i9fhZ/0B7R/osdWli?= =?us-ascii?Q?Gme2GjvbHONKX2T/BZlvRvKJvmCfzYrtOCex/cx5u6jJtS2I/XOorNAJTdcC?= =?us-ascii?Q?N2VCcbTZhqMIcU3hYId6NynCnJRFDTT3AMJqV1UpTpRV+w7L6CqrVuq3Igkq?= =?us-ascii?Q?qPwW8+V6KbA7YOxt5Jo27lN2098EInc35juTTe7u5GbK3dgiZrwr2bnUkGlc?= =?us-ascii?Q?ovcf6WovrlD5QlrYwfiVq0kf2APt84oPThbXOcr/Tlet2RuQIetFR3b0UwEW?= =?us-ascii?Q?1dw6AuXUIDclmkSFHcnY6Jk1yZZbMPazMSRlnsOc2Y+oddv6gATfTOMyla6u?= =?us-ascii?Q?IXUvfo6uye4RvV0P+AMyrtOFVUKGxzsuo5R7JiQkWs5Lmzf41JUbufIUwtmh?= =?us-ascii?Q?02on8rBA3cFWGYlcnDPWxSBVBLaI7hGTZLmT5IInnhi/1YJpakH79x6vfw/G?= =?us-ascii?Q?i8KG6EdG6im1sG2xxLB0oDqAgltYID1U1W89Wa6PdfXJ6HQKOkSsxWH8ay28?= =?us-ascii?Q?T38tszxfV7HRJpcSMngDN5lGG+zi+mNGgBKMwiO20/1Naj3MWJrjZjyi3MWo?= =?us-ascii?Q?Yl4HXZUtI0rXYGe2p11yAwP+J/fn/scjXV6VpL/hug0YKjq6uQ9CV3LyZzHO?= =?us-ascii?Q?MxHcUiFMqQfBePOwyXQKTjPNoNECijV9SphsuFQ6F5lVi55XlBLKWj1lI6ur?= =?us-ascii?Q?iaX76AJssCiW8QPFZX+PyF9WG/FsXNPXAJLw5FZcQmLwqp2Wozc8?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 78f095db-32bb-4110-9b24-08de65a4ee04 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:57.5830 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wGHxGKC/pApIgjKB0b9lmyICC5w7WaU6Adw0utLT1qG28vge9ONZyw9gLdGCipqRFwTWP05EJx/1OqVpuxJ7lQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Some DesignWare PCIe controllers integrate an eDMA block whose registers are located in a dedicated register window. Endpoint function drivers may need the physical base and size of this window to map/expose it to a peer. Record the physical base and size of the integrated eDMA register window in struct dw_pcie. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/pci/controller/dwc/pcie-designware.c | 4 ++++ drivers/pci/controller/dwc/pcie-designware.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 5741c09dde7f..f82ed189f6ae 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -162,8 +162,12 @@ int dw_pcie_get_resources(struct dw_pcie *pci) pci->edma.reg_base =3D devm_ioremap_resource(pci->dev, res); if (IS_ERR(pci->edma.reg_base)) return PTR_ERR(pci->edma.reg_base); + pci->edma_reg_phys =3D res->start; + pci->edma_reg_size =3D resource_size(res); } else if (pci->atu_size >=3D 2 * DEFAULT_DBI_DMA_OFFSET) { pci->edma.reg_base =3D pci->atu_base + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_phys =3D pci->atu_phys_addr + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_size =3D pci->atu_size - DEFAULT_DBI_DMA_OFFSET; } } =20 diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 43d7606bc987..88e4a9e514e8 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -542,6 +542,8 @@ struct dw_pcie { int max_link_speed; u8 n_fts[2]; struct dw_edma_chip edma; + phys_addr_t edma_reg_phys; + resource_size_t edma_reg_size; bool l1ss_support; /* L1 PM Substates support */ struct clk_bulk_data app_clks[DW_PCIE_NUM_APP_CLKS]; struct clk_bulk_data core_clks[DW_PCIE_NUM_CORE_CLKS]; --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 555693E95BB; Fri, 6 Feb 2026 17:27:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398821; cv=fail; b=qdN68HyOHRrd06g6cUtJdjG0iLbWTdfr6c2lD7qmSyve7gXLq1e9ep7ZLqJLkFynL9wr+7HVCKJmsvO/9W+EjRB6jeys9+U2BB8kPG2Tf6p56aaFp5kfm4y6wQASNn6Lc5lnODsUOPNNfZr/Mm8WhnwaHT0dFf51gzrQxoSmeGY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398821; c=relaxed/simple; bh=a5TtUgqMzQrnB37yY7y5CogqqVBqusI9mm8Bfddm8bU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FR1GF7r0KNsTm/X+CVk2NxgszTjdsUV76GNzrnEOuDGsGf3k9gZI+cf/W4YGKzgPXn3xGba47fBy62Y061zmwXTBhO1tgCfPQfxInuNRo4PSc4NuCXTKRcp6S5ID1SMmamIaxgS3+WWe5DhiSu7Tyjd/MXXUlIiPd9z0zleb6Uo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=sKjGjd9p; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="sKjGjd9p" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TGUYVFmWaczgZL3zwtH9W/W0dntsxNvYrmf6E5tn0n/+O1gl+Q5qkZcZhN14V8l/MzLLI1RqRC4XhWCYn6ga+YLAkE5M0ErneqnoT1myNNBn9fDq3XIfeaejX3c3ukufNmffJGFa0XA2DGnGo85vhev5drGEXNj4JbBQSWwzeKZW3rSXmokAimUvgfemnd4/QXmJYN87y5D44u54s6ZvrKiXkmX2wJRy/QYLBncZ1ZwacXU4Tn3XV8g7n9bRfEhfB9NG73bV9f4vf0j5KcDBlc9a95aM08gQyid4sGwSX02N0GWh+GySfkiQ+pfQJk2lL67jLpgCwROx3NPMRK1CJw== 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=4U0LROWm8PCs9Uohq6g2Iv/uSbw+u79KT+pbJetsDdY=; b=gHmdu4N05ieT1K7BLKElnvViiFlGKOFsRkWFlFSnGLxXjFxZWiMOjyvJxovUJ7sUempmjtl2UG/n5nrqTZZAgGVrRl/rlE6jUPauPYxXbriZTW0Vge7IMbw3kmhUOaS9RMcAzOVCKRVjdgpwmxddaesVqjdqesFDf82FpyehNEee9b5KDERYN5V4J3YG+YrmBq7Vrd30/eqvfwSPYFG44PF52GAFhweYFI92omKXoC7XxKTslFCN1xvI7IICdqdqHMdGPPosYj5aJvam64fr2V+3sxNiCmQcis5Z3meDnB86/5G3UyaGEuaoxg3Bmmu1HIRFu47SdO39Pfb2d3zVYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4U0LROWm8PCs9Uohq6g2Iv/uSbw+u79KT+pbJetsDdY=; b=sKjGjd9pWzVAuzr1FwRZ9BV1lqYm/5mSSNupeMtsREobmjCl46RvA4SKcR/iX+QnRK/stCwh17XwDvlwVywwVei6CjUTYEguosp7tp1P8WQuEipTyw9aJ4CAIb29ELY4KBfXcMoGCQOn1zHLiJZID9eemS2dCn4DmAVWTvk77vU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:58 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:58 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 6/9] PCI: dwc: ep: Report integrated eDMA resources via EPC remote-resource API Date: Sat, 7 Feb 2026 02:26:43 +0900 Message-ID: <20260206172646.1556847-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0088.jpnprd01.prod.outlook.com (2603:1096:405:37d::9) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: d80158e7-3526-4f89-169d-08de65a4ee71 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ojnxUb21XuSJ+juiN0LqLVUatGNn8ko7KGof9yZnB5Rk01FwOQqXVgiq6M07?= =?us-ascii?Q?lANvBrr8y+Gdbe/A6LgX+94/+hpzMO0HrfUlXJW5bAwq77BccIT/dADprdt3?= =?us-ascii?Q?0w7PgyW9W/TcoVXlVj8x4AgolchRuCGgPRpdGQvpYd6xPe0AshU4dsz3WYoW?= =?us-ascii?Q?YWJORvWzdXgCBfOZzQ4O+TLPEfFUITrgHrSkHiAKTJI3irjf3stz+pVDsdzO?= =?us-ascii?Q?Z7Dnu/XFkeqmSc4419sjpyk/RQevN+8rKE40rFRt2Y8amtZPCGwGgeZqAkc/?= =?us-ascii?Q?mwQbBdJ9iIIs26YWOtGAXMdUbO9GY0L5R9zJt5Hcqi3N4OPywuMKgiqwp262?= =?us-ascii?Q?OjGh00GHPmp/L/+BH7iCIHSTuS5TjkgTy/JjX92mlIlsZxLEhQVG+FUdcHuf?= =?us-ascii?Q?nzShNNc+YnfSYG7/Mi9CWs/0hnoCJQLwE5TkfR2WNhACyhRij9fJ8FgMyzas?= =?us-ascii?Q?V5T0sbY17WAKO6s/APbiVnG/7nKx+9CLdAVFgGiqoWRSoEmt+XMIdKHx//hv?= =?us-ascii?Q?XtWgnxnBYCwbU2oArVSvW3w9GmITwQLJZ7B/5vfd4MiTOACZe6rqP36gd4PW?= =?us-ascii?Q?31dcJUbZpRnxbvITKBdeHwkwOBuZ48wr0tZGOHVL4obNhbPDNAqcFmpeBYj4?= =?us-ascii?Q?DvxSNfK/hYmKj0U2VsrhY7lDQl0UkPESPV5Ldair6ZgHaKS3t7s+7GxqeGmJ?= =?us-ascii?Q?Kge/d/ZFFOgA1fd/JhoCcdN8XJdPg2IOvGk86V52QiK9pYMSa8Jt/kyMWF4l?= =?us-ascii?Q?xkUrjlATGzdef6G8IOX+fceNJZu2LOChQQ88nY5SbQYUjDa+0UNyR3lDoweH?= =?us-ascii?Q?hMDttqFZaipVMZTfraiKoWij/NLyY+cmGKF8TVH0AKoayoR9DobDvY6bgDBV?= =?us-ascii?Q?6IEIVHaxUcnBLfjRzi+xHAH+6umJJTZ9+0JWGOGwvgGldW91ZGCZM17A1u7J?= =?us-ascii?Q?ZKgFgMxroXPeK4eiRJBI1qF0ljdyDC8Nz3E4glVxK4yBt8DPPdwLsR1oD11j?= =?us-ascii?Q?B/VuXgVOTfHflMWE7xBgEI/53g/0Om0gjyA27EjNDW6IhXUZOWs1W6diiy0D?= =?us-ascii?Q?7FuCzrwgz3NASit05ahivul0DANA4wkpc3IzLJz/JqGillV5YLcx3kNeenQL?= =?us-ascii?Q?xuMCsBpcT/zjAxMm3eNIJYq5tP6mCLxoNGl83ICcAkT4lEUF9VlBHIUpXks+?= =?us-ascii?Q?podFCVd4g+ypklLO/HgINnQjriGJbBFIPv/+oEQH/H55LTc8ZVtzUBULVo9U?= =?us-ascii?Q?Usqh+yBGDQhQoo0C8PPbe+0nGJSHf5RRXbxgsydkceiKDTBWIq/CG1TdtX2w?= =?us-ascii?Q?ODvWrZ6L6ogQUoe+4Duw9ReMd+YCXojVOUKLf6Sb1bsQwLmNggFw9KjHKb0w?= =?us-ascii?Q?+RXJf2sd2PvO3jgayd0IC4WjzRTaE/xjO1dCtRZeHml/tOoytRnOq42gwSnO?= =?us-ascii?Q?x8qN7Nl/3ev+z/a/DbRe4DJ/TfXcrujc0YYVUsR11lO8w2QuGlMWMnp1nG9f?= =?us-ascii?Q?eDnMQmaulH6So6SQ76YzBNLRXdId1+gJhkSFQOvYw4m076vjpk08YChWOP1k?= =?us-ascii?Q?hBWbyMnzoQVDmQe7mjI=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+STHXozxORLtn7RxKOAuklE9VCUQ8CzyY6S2t2e5tjvNcjb4CRU1oF2GRFQA?= =?us-ascii?Q?QGyJmxCTcA+r0xT4KnQD40X7arK/4ActzaXfq8xuwOsgmAnUqWxbB0LhKYi1?= =?us-ascii?Q?nejYclvqB0PCKXCV5MSdWozrFIgEFv6htneKUhiDPfXu2sF49UQ9jomfS9GV?= =?us-ascii?Q?LrUZf8zK7aNAJdjO1Ef0iZR8Yc1LD/kKgwdpuSE6jaty15KRI90o2rez4Yye?= =?us-ascii?Q?4k7AikQ6tYDvoFEH1EKuiu0zYmI0SSA7qMFdZAT0yEJrhtXN9+EAWElFT2Yd?= =?us-ascii?Q?be4BHAjfEO6c2thxsWxKtPnmq5TV+wpHpPskUiGclKlMYs+kkBDi+V9LxGu0?= =?us-ascii?Q?7LEbOo7mXFeMhKTT3X6ny/UJe4sGeOorpho2qpG99uRAHMQ34LlHzzgBXhUr?= =?us-ascii?Q?Q1j1K8DUhltD/aPkLa6lofwKn46isrmYeZiWSq57dXiu2YBPEJC7WypmtQzq?= =?us-ascii?Q?tWip/0NLGsxfrstYOQcUA8iJT6RaiKpeRuuYvbh+0oW3sbcpxb6WVz/Bo+fD?= =?us-ascii?Q?ACxsBwoVk2WqKCGs7KSLENSWuVnWcMECMcxtEfDIJtdoh3LSsjpC39ukOMPX?= =?us-ascii?Q?Yzv4AT+PtsAmvCHs1pmOexAoELhWb9nKby0P4zJGksdj9aVnT9TRHQyHAtEE?= =?us-ascii?Q?vjDXSeqzt1HOBdzdNF/1shOa7SNWDIQnYxKFa8b7Jeu30013/NsjdUdsAmU4?= =?us-ascii?Q?ioqjFKS9xs669EFvW096iwWgjUUfLuWAXWDo9YNBhCrV+Arg2MNpPCpENQ/b?= =?us-ascii?Q?dvbdAjWRiEXn0f2cRVrtG1sx5BjVvHUkWbNrFKizBaYdGHRo+D1TipErz0yn?= =?us-ascii?Q?dOxoyXcPAIa0xE8FH49erRxISQmkuQefV367RRMrvU9TlVRuF4pxX4OSoSJP?= =?us-ascii?Q?RbWWw53279VZcK26+vp6z3sM8WCMQNiUKi31W+u99MD4jCcetAq//LIF+yT9?= =?us-ascii?Q?KyC9i7NKWz7TE3E1VyAllDRxhgu8uCM4pils//63Fw8PLl1gWmZGLVs7pn86?= =?us-ascii?Q?1Tx/sZAzLrYP9tvV8B0hEiZEnY/2E1z02uhU6xNXZqOvRMzAg7PKKTD0CjNR?= =?us-ascii?Q?tztwYw32AwFDsH66U1zw4EYWfNH0GMUVc1t+hjruLgRGTbE9MwL0tZ5A4pfe?= =?us-ascii?Q?D6m3CNO01xVoCmnu+fSK22GAB96W96E9vW5rKK4w5bnsPq9iTcddJtxqYUhb?= =?us-ascii?Q?gk3jR6JbPOM62yru5MOFC54h/9WhhFEFav08SHJSyIRGfhD8WFiqV90ZtkTi?= =?us-ascii?Q?pQt7GIg3ibAT4FyayAAxh373T4AyZv706ZDjImEuXveN05PUCvOUVB1jt8LA?= =?us-ascii?Q?44dN/1c2eQKOeFb920223bpWhFNo5DH2pr9nXccXumXGvTyGiR+w8xx3nXrn?= =?us-ascii?Q?DTxWtU8FXju9OFQnMKGUoeRjbY5vBm3cRz9hkLXmLIJaSRja/Xb8mcZG1fZv?= =?us-ascii?Q?p9zHnCwhyWUnf1xr/HG+KyWSHN3rkkkLTg74dHG6Y0O/cxIhmuRMTMn4ETbP?= =?us-ascii?Q?WZF7ErXucvZyWeYHj2qOXkzCqBsoYWJK60CTiHgm+Y4U6sqZsv4eVpipWMd/?= =?us-ascii?Q?mXy0MkAwGlDt+cCQVbGWyXGnjXd0SFQytCn2yDi1y4GL2KjYyFMP/7BKf/ln?= =?us-ascii?Q?Ay7EsHcIPWw7/Wz2wYiXtf9jAANWBg2m13UXmw0PwockzuD7IhlPYbdCt4E2?= =?us-ascii?Q?Y9TPpI+0+BW5KQYA8994SEiWWfSeACRKffWNwmIvC+IfDzfhbpItMKLMuO7B?= =?us-ascii?Q?l3btF7+8V++luqunPp4ttiLjVu7GcQaNBzd+0qBdOO1G1yA3+iJo?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d80158e7-3526-4f89-169d-08de65a4ee71 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:58.3087 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1Pv7CoGf7s/rdAu8CVdX7bA9THnai+ffuhHOfYID0r39fQG+GVjY6rbbmbpWXgQOxGqz6w1T0aYMUG5PwnzpvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Implement pci_epc_ops.get_remote_resources() for DesignWare PCIe endpoint controllers with integrated eDMA. Report: - the eDMA controller MMIO window (physical base + size), - each non-empty per-channel linked-list region, along with per-channel metadata such as the Linux IRQ number and the interrupt-emulation doorbell register offset. This allows endpoint function drivers (e.g. pci-epf-test) to discover the eDMA resources and map a suitable doorbell target into BAR space. Signed-off-by: Koichiro Den --- .../pci/controller/dwc/pcie-designware-ep.c | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 7e7844ff0f7e..29dedac86190 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -8,6 +8,7 @@ =20 #include #include +#include #include #include =20 @@ -808,6 +809,89 @@ dw_pcie_ep_get_features(struct pci_epc *epc, u8 func_n= o, u8 vfunc_no) return ep->ops->get_features(ep); } =20 +static int +dw_pcie_ep_get_remote_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_= no, + struct pci_epc_remote_resource *resources, + int num_resources) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + struct dw_edma_chip *edma =3D &pci->edma; + struct dw_edma_chan_info info; + int ll_cnt =3D 0, needed, idx =3D 0; + resource_size_t dma_size; + phys_addr_t dma_phys; + unsigned int i; + int ret; + + if (!pci->edma_reg_size) + return 0; + + dma_phys =3D pci->edma_reg_phys; + dma_size =3D pci->edma_reg_size; + + for (i =3D 0; i < edma->ll_wr_cnt; i++) + if (edma->ll_region_wr[i].sz) + ll_cnt++; + + for (i =3D 0; i < edma->ll_rd_cnt; i++) + if (edma->ll_region_rd[i].sz) + ll_cnt++; + + needed =3D 1 + ll_cnt; + + /* Count query mode */ + if (!resources || !num_resources) + return needed; + + if (num_resources < needed) + return -ENOSPC; + + resources[idx++] =3D (struct pci_epc_remote_resource) { + .type =3D PCI_EPC_RR_DMA_CTRL_MMIO, + .phys_addr =3D dma_phys, + .size =3D dma_size, + }; + + /* One LL region per write channel */ + for (i =3D 0; i < edma->ll_wr_cnt; i++) { + if (!edma->ll_region_wr[i].sz) + continue; + + ret =3D dw_edma_chan_info(edma, i, &info); + if (ret) + return ret; + + resources[idx++] =3D (struct pci_epc_remote_resource) { + .type =3D PCI_EPC_RR_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_wr[i].paddr, + .size =3D edma->ll_region_wr[i].sz, + .u.dma_chan_desc.irq =3D info.irq, + .u.dma_chan_desc.db_offset =3D info.db_offset, + }; + } + + /* One LL region per read channel */ + for (i =3D 0; i < edma->ll_rd_cnt; i++) { + if (!edma->ll_region_rd[i].sz) + continue; + + ret =3D dw_edma_chan_info(edma, i + edma->ll_wr_cnt, &info); + if (ret) + return ret; + + resources[idx++] =3D (struct pci_epc_remote_resource) { + .type =3D PCI_EPC_RR_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_rd[i].paddr, + .size =3D edma->ll_region_rd[i].sz, + .u.dma_chan_desc.irq =3D info.irq, + .u.dma_chan_desc.db_offset =3D info.db_offset, + }; + } + + return idx; +} + static const struct pci_epc_ops epc_ops =3D { .write_header =3D dw_pcie_ep_write_header, .set_bar =3D dw_pcie_ep_set_bar, @@ -823,6 +907,7 @@ static const struct pci_epc_ops epc_ops =3D { .start =3D dw_pcie_ep_start, .stop =3D dw_pcie_ep_stop, .get_features =3D dw_pcie_ep_get_features, + .get_remote_resources =3D dw_pcie_ep_get_remote_resources, }; =20 /** --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 CF78A423A63; Fri, 6 Feb 2026 17:27:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398822; cv=fail; b=iLAOXZ+S/EZP4RbtA8Orh/9tDNruDcaaxya4ub27uGsKAYelcGEyyhxuWpoE/TQgecyDug36ZKHPnBseHgFq1+IkcpsDzYk0RmHny906RL9HjGAAn3ZmRt7rkZlaqcXbwLFm5yEgAOGP1pOsdrIFHAY5MV3yP7sCWhMJfvCfAH4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398822; c=relaxed/simple; bh=CL5jsTp7lrb2+wcday+T4gsJMpu+/RXeRgEZxu20qfs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WJQ9hZOxnMIwyZAHe0ohGAP1nvE6I0m3IoiN2xP5cscuByYi6+bQmWifZrmPm06mH/JvLL2NgYKxV3IrZUiIgnf66ZZMkzpv9tvoWQyuHb7nLEOZoA7toYAtPF2ZoPUaui3iI4l6AwFR5eO/AA+5bsOQv8rDsOWhhV56DQIarnw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=i8nSSTTa; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="i8nSSTTa" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C0Gd6Ug/GdZNHC0oKAT6lBzI+841jAvPmNLJVm8S78h/zueoZclyuxFm3+nyLM9KDKSJU1HjItXKQj8pjqjpfwkYLFXJrbyDnboHy/fhnNa6LQU2a25tSoqKL995QKWRUJKiHsXMq5XhhbbLjkxFLTvWSN6kHpjdB8xUi0rnbWyKqH8YQpLhiqyIs2UsgtZIFSBV4n2+0iIoDh36cfqL4cXw2Z//+Hs2/0jd+0QThVxcDb+7mVDDP9p2Si0BhPcB2Iv15aW77AQCgZZsQ6zEuDVqTZP3j4TBZvzBT7lR69N8EGwTKY6imQJcgY6Fk68t/oW5SGpyruh4JgvBZIfddA== 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=RNsPpLeWwvi+3IPaU5C8kjjJwYYVszKY1ZV7br5WOV4=; b=VGGn/lJMfZbckrDPoOazP1tRs3j3k9h0UXpANqZLrLMYqhXjH5pnSYhIuqyNiW+HrIhCyz63jaFPrbnc7ELXDgQGlo8mCKqoWhzUEvHXwi+PJCfC8mzUplgUGfxN6Nf4DEyRp2iXsIBPnfm1CH/KvIQNTXUYfauwS8VHgy0GP9k/k6GCJ6oDcDp58iHFFdZoiUlBr977ziiWVcSTGqq2t9vCUaIztzGAleXtK+cBNHTP8K6LiBk2Dv62A8Oe26RE2zxVQzSabaqQrVjOttAnUC6cGoGNj598KjRulfx+old2FmkFyVHuBNSBaTikyME0lGbxbzIDPzGMCq9kRHMTrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RNsPpLeWwvi+3IPaU5C8kjjJwYYVszKY1ZV7br5WOV4=; b=i8nSSTTaB0gajjC5urw1Di0pdnzTYVHU+SvnEdF7jSTH2yLk2qjn+MNZyG2cMVxrcaKSeuRBLrNsgfc+e/1J81MPB6RhxNg8KwG2nhwK8mogtPw58fbL2gCChaaEAOIeZLXv1OYSmfXHACGHagQePa7um08d/LHY1+MlJ+3kDyY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:59 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:59 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 7/9] PCI: endpoint: pci-epf-test: Add embedded doorbell variant Date: Sat, 7 Feb 2026 02:26:44 +0900 Message-ID: <20260206172646.1556847-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0027.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b0::9) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: 11d81071-2d22-4f69-4b6a-08de65a4eee2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Ip2N8HkSFfCL6PiaKlpiO8HleiXTlI6cO+hwVzidvz5uvjz75fQGUUgPdkXU?= =?us-ascii?Q?VEGMBVjIf43umM6UEcX5n7WijeRhJzU6T14kcu3fHYK0ZtD3dXmdIKqvaHD+?= =?us-ascii?Q?tpIi7NrmDwJa118icoApdU3uTOusXNH/VAGXv0mRM9Ll9dKmm1bkLbO8v39h?= =?us-ascii?Q?4ZjcffmfJaHy3D20nJgm5TKRFDwqvG7yTRO4wJC9iw9bNtV+suw73YFz6IXc?= =?us-ascii?Q?iVnc81f/5iyJZRWXtUW0m6W2yj+Xr2EE4EU04zuKHTwsE9e7gIXM7SAnlh9R?= =?us-ascii?Q?6zu7+YTRqAa02mze6SnFnHJkSos2U9Msgt48LtjrMjKIAwqqBmESZI2pnOL1?= =?us-ascii?Q?+B+xi5h1upLSYdvp/T41pbjaYCJtKimMSsNoMBLAPY074Ts7hLGoJNmdq2Gy?= =?us-ascii?Q?Mr7/evD6y2qtDb/76rLYZ7NT005AnsCeNhFkssFBvElM0hLzPSelUt4zRCTi?= =?us-ascii?Q?hc0kYMthwJmE9NOdeGjaffS5Tcz5tBOzaYqQvhy8nDswlKx/Mklec2lC5SGG?= =?us-ascii?Q?fLJTDvy8jj2ARnnIJhhCEh59stMQB0oFb5k9Qs3A4HB3mw+nF8CyO0fyDSXm?= =?us-ascii?Q?G63ojermxE8FPrbd5l9EKTMORDIITE/CHXpqEAFaGGx55njTAtNZzSkFWH2X?= =?us-ascii?Q?eS2W1yNdOU8JW0ibeUazAtvXpng47DT6V9hUxnLYKyA7HueFlGs0EFPs0elV?= =?us-ascii?Q?t81NRvD6UUl3GPUtobDzKsZJARbvKS0Q5/R7Jgkd6Bn7pEKeS921OofYw105?= =?us-ascii?Q?SDKAWbWcZyO+iEZZuzhl6B8/WLzoBfVo+evsFs0geRX+vGt8Uk2zBzteoCk+?= =?us-ascii?Q?Ft/X8VPNKW4L3N3PJ0QKNTjQMlE8gY0RW8ZTDMw2N2e12T0fFDm9zcc0ZoDb?= =?us-ascii?Q?Zg/2EpkXxsIJatdszEEuyZGO1QqLP2OaAuvPRGvH35MYzLbDPW1LE76fzDlJ?= =?us-ascii?Q?Z5CjWmyLwwOPP81cftyroiLq3XC2Lz/hEsmKdCtAY8Oavr21xAs9Z8vKZ44t?= =?us-ascii?Q?8av6KX/fRm9B7kMOnNcEGRQa6jYOFXpZDiBo81707HrgVDn/H22si1v6Qs8m?= =?us-ascii?Q?RpZ7ZK3/ML5fAvmOX3dPZcpaivsM3p2bFS7HZURhqNXT46OcYT3ygf5Uvmew?= =?us-ascii?Q?3Sr8D8/Os4EgRgxXxudd6L9SFv1/vuP/l9LY/wW0+U5lgYF4RUDW8J0Nfech?= =?us-ascii?Q?I0FtWXeffD1eGPDCE83lADkfdoaY4IJ/Fpky726dxlZ9Az2qnVv/6z3UdafL?= =?us-ascii?Q?zGom6A/um88Oy6k8lV5x3NafRIwL8SXWIWyLWSPZ750zRy1B52XBp4ACQzIo?= =?us-ascii?Q?A+DXUK6dMkSQAAqdhb5ZvXgTZyH9YpFF1Imt2ayRBnXYwhb0gKWr4kQJ9wu7?= =?us-ascii?Q?RHRprv3MhOq5fPdDin42fxNELPQxrv/BD0R8vK+hAkPtcyWbSCSeJ1hfoLGd?= =?us-ascii?Q?5ZWA2LyGSOw+AioLl//0y73psVxpNc+aOsaNDTHtPwfytVEUqizocQCdYZaY?= =?us-ascii?Q?qHYM679RYbhnrSyXFhPRAKVk5LXGc72hkchsvy0/TvUrHAfhr1hcwCFsTHdw?= =?us-ascii?Q?pyH/RraVpfMFT2EcG4E=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tnmO41mZm/VOHBfbq4SIL+UI8AKkbBQh02A82QB3lNUpohBpencUv7pK94K6?= =?us-ascii?Q?DmWIvuQr7KcGjKGKaMzTWHWpHCYjVJur96EG56brAUxNIL2ChvKDXiHWHnWt?= =?us-ascii?Q?lv8umxJbYFvqsep+uCU4+9CH0wNp/0TLeY4dWWjEhAoRbEw2iU/92GcYqWrE?= =?us-ascii?Q?Gxk6Ao1Km1/OxLboc95y4fIybhTPjVOIFuHnizIIDN7GuTxjISMmjljHaI4p?= =?us-ascii?Q?DZxUXX4I6qhSKkJ85IsYdthJAnhMm3yf1y+gwSeiCcJxnr3U8UJDSDtdtVLj?= =?us-ascii?Q?Adwv2JPy1H72dZqN5wblWY6+VQQJu2EQ82qUT9eCC6AbES8ruHjHgopTNjSc?= =?us-ascii?Q?OTKdSVpwdHE7uNBjJP99XF+fCWTx59iwKSj65wjY0xT3ck6120Sbw3/4CHFZ?= =?us-ascii?Q?ITvDFV3KaNmO3Bl4zBS9CtKAl6oNQRdyv8xYKM+Thu6Jh7G/NFHxmd2AerKF?= =?us-ascii?Q?oNnBDcWA64kdWsui8DSupp4u90lHhNOoZQi24n9P3KdVK4AENlPT/729hQ5c?= =?us-ascii?Q?NWmjOiVWFrdCO1dw2jiJ8Y5+uba/OF61UWQquF11iLmHSC6jJIj0zA8FNglh?= =?us-ascii?Q?XEU+pOKQ9H9f9omnGemyo0g8Zx/pL+xc5hyZAxmp35t9+ir1cA2ImeWIt27y?= =?us-ascii?Q?smM+iH5y/zoY013chE/rT9kZZdysx+AvTei3j8XZO7JTYktjhts/H4iAr1E9?= =?us-ascii?Q?30EJwoTtZ8woHbo0L/7RMDCqdaLz9zn4voEGRpuEOBYEixvgPJupZdOhcBML?= =?us-ascii?Q?/pfolFtLq3+Aq1+g+15Rpp8yygHrPgmBqvJdkRxHluPZEfvaIFtOugdCJtwZ?= =?us-ascii?Q?1iJB2Ft1qc/1duPM/O0F0drycbsoXI4yNlE/QBDBo/Cv6b85Y41lcmtCn9RM?= =?us-ascii?Q?kRJxPs6YWv4CDe98RnKWEdlfbXysSoJPFq+G+hoSVANQygAL3gr/ykVH87m0?= =?us-ascii?Q?xk3ihtgAfdjjjdo6nOHqsVyfcHAbfeuuu7dxfnAVQyzwKviSeMjLvnJYhbIB?= =?us-ascii?Q?Z0RJuLrRtrhViO90NDqDAIukkaJmhNyyyFHlk9mpyUgTSWaqIssMPQkWYgxm?= =?us-ascii?Q?qwm1eZDJWNZy2pCWKacLzNHK/TXhh3X97h7vgiFOdam68cosMistkEDZ63ng?= =?us-ascii?Q?uUHYQkjJMt51uCTdaBffkwbxc+nbckiO4AkHrM1hstCO+Wn4knU9ARI+NZy4?= =?us-ascii?Q?QvBTPJOww2IrCOdvpLhV2OwfFvk6yUxHM+fGzIQsN1SSvEMVg2R30nj7Kd73?= =?us-ascii?Q?FVm1t5NwKbzWh9xyGJaoaptCFS2jh9iwPkucbeUgKmCvcuFp/28SteoKrpky?= =?us-ascii?Q?MDH8jiXOYvQ7o08oHVnMfM1Hxot8rR3EHX0uL4lQeDuOBNGfpHjTGZn0Vvar?= =?us-ascii?Q?0QM1ZnSRtS2aUydPBiLIENvxRE0toPxMmlq6NuE5mdMJ1W+s/aLCNAXtUDkZ?= =?us-ascii?Q?9Z8CRsn6ixJQKcZ3ChUoll1iN97HxdoRRZsVSPudzje72GIBiOPc8juSwmOU?= =?us-ascii?Q?tH35PsJuiz6b8MAPXg4ySmDDufqUvLSVEh3QiKrvE9n2YF0NCLMnitqEKwno?= =?us-ascii?Q?OMINJ8rBWbVSjoM1+SLDqAQMtmnKzvJteAs6x1Fljmk2c4PoPk821gpx1Jwt?= =?us-ascii?Q?myp7p5waVweuFaOnnU3j5mdoj3h3Jr9q9BubpUm2FL+nn2Pz/FpuPllLFRAh?= =?us-ascii?Q?TBu4rkObfsJjrhxTXZp2W4+5e2cVk8H2me6DCdrFiNXp7JklxA3jodcFtj0b?= =?us-ascii?Q?kXLoIu6rgmpZ3NkbDyaYFvrUaIB71ysqUEeLvlSo6d2T8kvcIiu7?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 11d81071-2d22-4f69-4b6a-08de65a4eee2 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:59.0451 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: pxtEH5TKjV14vfMHHL0Jw5SRdj/KO/ioStNQBX9k5NJuJxExrNRclbZtQBRdaW1RkUptyxmmFH5W+9MdGeE/HQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Extend pci-epf-test with an "embedded doorbell" variant that does not rely on the EPC doorbell/MSI mechanism. When the host sets FLAG_DB_EMBEDDED, query EPC remote resources to locate the embedded DMA MMIO window and a per-channel interrupt-emulation doorbell register offset. Map the MMIO window into a free BAR and return BAR+offset to the host as the doorbell target. Handle the resulting shared IRQ by deferring completion signalling to a work item, then update the test status and raise the completion IRQ back to the host. The existing MSI doorbell remains the default when FLAG_DB_EMBEDDED is not set. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-test.c | 193 +++++++++++++++++- 1 file changed, 185 insertions(+), 8 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 6952ee418622..5871da8cbddf 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -6,6 +6,7 @@ * Author: Kishon Vijay Abraham I */ =20 +#include #include #include #include @@ -56,6 +57,7 @@ #define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17) =20 #define FLAG_USE_DMA BIT(0) +#define FLAG_DB_EMBEDDED BIT(1) =20 #define TIMER_RESOLUTION 1 =20 @@ -69,6 +71,12 @@ =20 static struct workqueue_struct *kpcitest_workqueue; =20 +enum pci_epf_test_doorbell_variant { + PCI_EPF_TEST_DB_NONE =3D 0, + PCI_EPF_TEST_DB_MSI, + PCI_EPF_TEST_DB_EMBEDDED, +}; + struct pci_epf_test { void *reg[PCI_STD_NUM_BARS]; struct pci_epf *epf; @@ -85,7 +93,11 @@ struct pci_epf_test { bool dma_supported; bool dma_private; const struct pci_epc_features *epc_features; + enum pci_epf_test_doorbell_variant db_variant; struct pci_epf_bar db_bar; + int db_irq; + unsigned long db_irq_pending; + struct work_struct db_work; size_t bar_size[PCI_STD_NUM_BARS]; }; =20 @@ -696,7 +708,7 @@ static void pci_epf_test_raise_irq(struct pci_epf_test = *epf_test, } } =20 -static irqreturn_t pci_epf_test_doorbell_handler(int irq, void *data) +static irqreturn_t pci_epf_test_doorbell_msi_handler(int irq, void *data) { struct pci_epf_test *epf_test =3D data; enum pci_barno test_reg_bar =3D epf_test->test_reg_bar; @@ -710,19 +722,58 @@ static irqreturn_t pci_epf_test_doorbell_handler(int = irq, void *data) return IRQ_HANDLED; } =20 +static void pci_epf_test_doorbell_embedded_work(struct work_struct *work) +{ + struct pci_epf_test *epf_test =3D + container_of(work, struct pci_epf_test, db_work); + enum pci_barno test_reg_bar =3D epf_test->test_reg_bar; + struct pci_epf_test_reg *reg =3D epf_test->reg[test_reg_bar]; + u32 status =3D le32_to_cpu(reg->status); + + status |=3D STATUS_DOORBELL_SUCCESS; + reg->status =3D cpu_to_le32(status); + pci_epf_test_raise_irq(epf_test, reg); + + clear_bit(0, &epf_test->db_irq_pending); +} + +static irqreturn_t pci_epf_test_doorbell_embedded_irq_handler(int irq, voi= d *data) +{ + struct pci_epf_test *epf_test =3D data; + + if (READ_ONCE(epf_test->db_variant) !=3D PCI_EPF_TEST_DB_EMBEDDED) + return IRQ_NONE; + + if (test_and_set_bit(0, &epf_test->db_irq_pending)) + return IRQ_HANDLED; + + queue_work(kpcitest_workqueue, &epf_test->db_work); + return IRQ_HANDLED; +} + static void pci_epf_test_doorbell_cleanup(struct pci_epf_test *epf_test) { struct pci_epf_test_reg *reg =3D epf_test->reg[epf_test->test_reg_bar]; struct pci_epf *epf =3D epf_test->epf; =20 - free_irq(epf->db_msg[0].virq, epf_test); - reg->doorbell_bar =3D cpu_to_le32(NO_BAR); + if (epf_test->db_irq) { + free_irq(epf_test->db_irq, epf_test); + epf_test->db_irq =3D 0; + } + + if (epf_test->db_variant =3D=3D PCI_EPF_TEST_DB_EMBEDDED) { + cancel_work_sync(&epf_test->db_work); + clear_bit(0, &epf_test->db_irq_pending); + } else if (epf_test->db_variant =3D=3D PCI_EPF_TEST_DB_MSI) { + pci_epf_free_doorbell(epf); + } =20 - pci_epf_free_doorbell(epf); + reg->doorbell_bar =3D cpu_to_le32(NO_BAR); + epf_test->db_variant =3D PCI_EPF_TEST_DB_NONE; } =20 -static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test, - struct pci_epf_test_reg *reg) +static void pci_epf_test_enable_doorbell_msi(struct pci_epf_test *epf_test, + struct pci_epf_test_reg *reg) { u32 status =3D le32_to_cpu(reg->status); struct pci_epf *epf =3D epf_test->epf; @@ -736,20 +787,23 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, if (ret) goto set_status_err; =20 + epf_test->db_variant =3D PCI_EPF_TEST_DB_MSI; msg =3D &epf->db_msg[0].msg; bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, epf_test->test_= reg_bar + 1); if (bar < BAR_0) goto err_doorbell_cleanup; =20 ret =3D request_threaded_irq(epf->db_msg[0].virq, NULL, - pci_epf_test_doorbell_handler, IRQF_ONESHOT, - "pci-ep-test-doorbell", epf_test); + pci_epf_test_doorbell_msi_handler, + IRQF_ONESHOT, "pci-ep-test-doorbell", + epf_test); if (ret) { dev_err(&epf->dev, "Failed to request doorbell IRQ: %d\n", epf->db_msg[0].virq); goto err_doorbell_cleanup; } + epf_test->db_irq =3D epf->db_msg[0].virq; =20 reg->doorbell_data =3D cpu_to_le32(msg->data); reg->doorbell_bar =3D cpu_to_le32(bar); @@ -782,6 +836,125 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, reg->status =3D cpu_to_le32(status); } =20 +static void pci_epf_test_enable_doorbell_embedded(struct pci_epf_test *epf= _test, + struct pci_epf_test_reg *reg) +{ + struct pci_epc_remote_resource *dma_ctrl =3D NULL, *chan0 =3D NULL; + const char *irq_name =3D "pci-ep-test-doorbell-embedded"; + u32 status =3D le32_to_cpu(reg->status); + struct pci_epf *epf =3D epf_test->epf; + struct pci_epc *epc =3D epf->epc; + struct device *dev =3D &epf->dev; + enum pci_barno bar; + size_t align_off; + unsigned int i; + int cnt, ret; + u32 db_off; + + cnt =3D pci_epc_get_remote_resources(epc, epf->func_no, epf->vfunc_no, + NULL, 0); + if (cnt <=3D 0) { + dev_err(dev, "No remote resources available for embedded doorbell\n"); + goto set_status_err; + } + + struct pci_epc_remote_resource *resources __free(kfree) =3D + kcalloc(cnt, sizeof(*resources), GFP_KERNEL); + if (!resources) + goto set_status_err; + + ret =3D pci_epc_get_remote_resources(epc, epf->func_no, epf->vfunc_no, + resources, cnt); + if (ret < 0) { + dev_err(dev, "Failed to get remote resources: %d\n", ret); + goto set_status_err; + } + cnt =3D ret; + + for (i =3D 0; i < cnt; i++) { + if (resources[i].type =3D=3D PCI_EPC_RR_DMA_CTRL_MMIO) + dma_ctrl =3D &resources[i]; + else if (resources[i].type =3D=3D PCI_EPC_RR_DMA_CHAN_DESC && + !chan0) + chan0 =3D &resources[i]; + } + + if (!dma_ctrl || !chan0) { + dev_err(dev, "Missing DMA ctrl MMIO or channel #0 info\n"); + goto set_status_err; + } + + bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, + epf_test->test_reg_bar + 1); + if (bar < BAR_0) { + dev_err(dev, "No free BAR for embedded doorbell\n"); + goto set_status_err; + } + + ret =3D pci_epf_align_inbound_addr(epf, bar, dma_ctrl->phys_addr, + &epf_test->db_bar.phys_addr, + &align_off); + if (ret) + goto set_status_err; + + db_off =3D chan0->u.dma_chan_desc.db_offset; + if (db_off >=3D dma_ctrl->size || + align_off + db_off >=3D epf->bar[bar].size) { + dev_err(dev, "BAR%d too small for embedded doorbell (off %#zx + %#x)\n", + bar, align_off, db_off); + goto set_status_err; + } + + epf_test->db_variant =3D PCI_EPF_TEST_DB_EMBEDDED; + + ret =3D request_irq(chan0->u.dma_chan_desc.irq, + pci_epf_test_doorbell_embedded_irq_handler, + IRQF_SHARED, irq_name, epf_test); + if (ret) { + dev_err(dev, "Failed to request embedded doorbell IRQ: %d\n", + chan0->u.dma_chan_desc.irq); + goto err_cleanup; + } + epf_test->db_irq =3D chan0->u.dma_chan_desc.irq; + + reg->doorbell_data =3D cpu_to_le32(0); + reg->doorbell_bar =3D cpu_to_le32(bar); + reg->doorbell_offset =3D cpu_to_le32(align_off + db_off); + + epf_test->db_bar.barno =3D bar; + epf_test->db_bar.size =3D epf->bar[bar].size; + epf_test->db_bar.flags =3D epf->bar[bar].flags; + + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_b= ar); + if (ret) + goto err_cleanup; + + status |=3D STATUS_DOORBELL_ENABLE_SUCCESS; + reg->status =3D cpu_to_le32(status); + return; + +err_cleanup: + pci_epf_test_doorbell_cleanup(epf_test); +set_status_err: + status |=3D STATUS_DOORBELL_ENABLE_FAIL; + reg->status =3D cpu_to_le32(status); +} + +static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test, + struct pci_epf_test_reg *reg) +{ + u32 flags =3D le32_to_cpu(reg->flags); + + /* If already enabled, drop previous setup first. */ + if (epf_test->db_variant !=3D PCI_EPF_TEST_DB_NONE) + pci_epf_test_doorbell_cleanup(epf_test); + + if (flags & FLAG_DB_EMBEDDED) + pci_epf_test_enable_doorbell_embedded(epf_test, reg); + else + pci_epf_test_enable_doorbell_msi(epf_test, reg); +} + static void pci_epf_test_disable_doorbell(struct pci_epf_test *epf_test, struct pci_epf_test_reg *reg) { @@ -1309,6 +1482,9 @@ static void pci_epf_test_unbind(struct pci_epf *epf) =20 cancel_delayed_work_sync(&epf_test->cmd_handler); if (epc->init_complete) { + /* In case userspace never disabled doorbell explicitly. */ + if (epf_test->db_variant !=3D PCI_EPF_TEST_DB_NONE) + pci_epf_test_doorbell_cleanup(epf_test); pci_epf_test_clean_dma_chan(epf_test); pci_epf_test_clear_bar(epf); } @@ -1427,6 +1603,7 @@ static int pci_epf_test_probe(struct pci_epf *epf, epf_test->bar_size[bar] =3D default_bar_size[bar]; =20 INIT_DELAYED_WORK(&epf_test->cmd_handler, pci_epf_test_cmd_handler); + INIT_WORK(&epf_test->db_work, pci_epf_test_doorbell_embedded_work); =20 epf->event_ops =3D &pci_epf_test_event_ops; =20 --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 44007425CC6; Fri, 6 Feb 2026 17:27:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398822; cv=fail; b=uLNg9NvsH/e98tCCntkL8aQsdDgrlegraG7KgjxLB1ZJuZDjIWIWh4fyKheCcqfva0A7JzGRCr1YRO3d7+nEAotAJJmbMcOYvKLBAEXtL5IedTAqfv8/m6xciB3VnTFcV0k0JC0/raFRdlBlYQiu+wBWNL5bjpZSH0xGyzsOm2c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398822; c=relaxed/simple; bh=jlcOul59TABczguEy9MbWXpIHEQvwzwvAQb1L1Ti63I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=PccUtcUAu7p8AdwIxkrXh50j/drl9t02ICK6SMzJwc6UGTt79lW9sVcwN50DqRFBKyQ+kMpZFVzZfs4jEWcSw8HRTYAL1VBY7QKCMAplYn2RSpyluAMxOkxB2R2lJDFXSg23UYO3uXNP48IWGfZCn11lHAVCtuvvAMEx7t6Sg6k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=qHjpDfJi; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="qHjpDfJi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rb9U7DZvhr/GQAKkPLHKgzQUNZFF9kW67VIGAYwVw7jv0d2yY2JzIyy7TyBm2SSz4r9K90AQrJOnAnT4+CyUSfO409a3S5HW+Ryam+tX00heKESDAy8wMAq+B/o230L3T2TTs0FYDSotVihluo/9egh5Y309oml2ZEil7AjjOoJo/TQw5FHHMg+OuRuaWEW5K4qBtcK5w6KvdvmXjNJjPb0oQLcOk/qn5uY+u8V3r2YPwI552SNH2cYLp0Er0q8Yxulmw5H6uvqmxq8lGeUs9sMaOobucESzpDzc5JWvuLcm71K2Dz5rkMBcS4P9QKLjA51Nbr74lHgTUwmNX7EEdg== 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=ZG+v994oHVGibi6C0FkUg5lH4X3o1zh73SZsNC8nWF8=; b=U+LQe/2zDly8/0vwLhaVPFtR/rjeOutxusSh2rJsGZo1METL2xP0TUSVI2uD6+ahEk3AHyUU1/POXCK/0NP13Fkn7/4LaPmFqVAcfzhZoCd5ySEsZq+RTENkTUaw8AoezS80b15gI6EzzD2ZldrTCWfVs4jckLJnc5WE41b+/sa0SXVp5hATYOwgehTxogEHrppt9AcOUPdTgQvaRJc202d74ZvxNf43VcRgBvvZSGfFJTOMSjMQVqlb3o9XYDsI3oyY6JZI98tGx3jXff4wLlYNyTpsaIprqPqDpSufyPtIS5KC35SDZ4HcAK3u5tESMfzIwkhsIFv+Sf9e9fX3sQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZG+v994oHVGibi6C0FkUg5lH4X3o1zh73SZsNC8nWF8=; b=qHjpDfJiNJv3VvC5D7wPo1sb5i3zohp0C0UE1lLdPQPSnIIT0jE6Q6EBgeISZH0NyPl8JhsMhId4bOcdwOB31jqWptNwKuHrBIrSCNnFpJ6RHM1m6x4+lvbietNaJJU0iXsFkmZb2auLHbjSRGHGmmw/9sKXI+KwAscZJI4q1+E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:26:59 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:26:59 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 8/9] misc: pci_endpoint_test: Allow selecting embedded doorbell Date: Sat, 7 Feb 2026 02:26:45 +0900 Message-ID: <20260206172646.1556847-9-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0089.jpnprd01.prod.outlook.com (2603:1096:405:37d::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: b386112d-10ec-48be-e744-08de65a4ef50 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?oxGFeaQcP+QOnvMeqQARP26pf9QfmI+96odLqEaDS4SzWIqZ9Rn639uh8APv?= =?us-ascii?Q?eD17y0ehlFWjOmrYMlqUApEj1wv9Z79bgS22eMltsmM2B9MRkqcP2Edh+3eM?= =?us-ascii?Q?sMOY54TEceFCBZiNnIygvKON//nGG8Eclqzuf7zTo9vLjQ7qvRtRaBtzEL2v?= =?us-ascii?Q?R3K8bVAwPCPD+7+CqVAcGkn0nZfJ7RpVSwtJ2h1bjaeAUOAPp6HWfiw8rkPr?= =?us-ascii?Q?j6ud4Zbxrju37R6H2kmD/vE1XuUjT9STW6WvHU/bl86lDc1TRSRUwT6OeZb+?= =?us-ascii?Q?y+SraqE3fYSb23ZGnzVzdz/ZeJe6fjnnIuh55ixa+4zNX9/P2W5NPgot0PHs?= =?us-ascii?Q?KhwJ7l0UHMM8msQ7rwQOJb9yrOOIsO6UIrivnDhRlKWlDuJHToWjS7QL308g?= =?us-ascii?Q?r0Akh708zoz0nNVHb6vT66D05cXMeG7wNIfKuic/Lzn+x8r8qNeAVZXJ4wtE?= =?us-ascii?Q?gjt3jj48BqjxH/B9FTORdkOVv3JiUegIu+AzuDNjmuHbGOP0CZAajXEn6oBG?= =?us-ascii?Q?y+YseKYgSTl4b8VAhd9MF3aljWxKAif+LTzWS+GPtI8CVU7FdpC6dyWeyUrW?= =?us-ascii?Q?c54QNp2mIVMRcSZ0gx533+ZIfreyLFOcnwnfOtDzhjcpFW7kskOedyiWikpy?= =?us-ascii?Q?k8NS65nSa+WCaO5sMLKShJ4BE+LMsmbH7m/qlxoHAdNz1HordV5pLRjMA3uO?= =?us-ascii?Q?F2evSmTS329XCc/B4enQckK/1s3rdL58y9Mnw9DSbt5Y8z9C7keFYeAXfjik?= =?us-ascii?Q?q/57jxrvSY1Mje7MBEhqHSIDLxCor+PVanXsUw8s1pH0xTnGgKQ63GTM73Us?= =?us-ascii?Q?4pXNGprk/FjktFa8BSqnF7cbAb3957bg3emt8mEMHrFAtytt16zAetjOiQBJ?= =?us-ascii?Q?1yNU8AdOc1+L1tVFU9ZNXgxHtAb/9SMe2x1GV+Ij7RFYbZOU62Xu4yQ+Q4mB?= =?us-ascii?Q?g8ORsMoz8t9F/LxuRfz1hy4k+QAC4M00Rxb2NfIBakrzRWO0qeJE6m8TbFV5?= =?us-ascii?Q?OLb1Eqcxa+C0TPD66eqJnVU9Np+MUX5XRjOl2u0xiEWjnctWQ0pVCiKo2CDC?= =?us-ascii?Q?BI8th0I6rDvi3jPbjqVKeREiXOTqpFwNel4MPVBlssonTL+sFqsFZkV4JdGx?= =?us-ascii?Q?ri+nFAZXojYnU+rQBRbKmJkk8E69rt1s04AW6MtvXTPUspNQDg/PfMPCbCFW?= =?us-ascii?Q?bxkuQv8ArU9KvcgxF94Yt+wYA7aeKS/NWDVsGhDuTX/Ls0Z1l3sUhYt89khx?= =?us-ascii?Q?IF7Fn8nJDCsrqW+FrfFyt2cLVB1gJbEgUNBILvkGprDwglY2mqlO7V81V+N6?= =?us-ascii?Q?2NwAJeFLqJLYBqfpPc1t+OKa01BdPtlMcbUcQQsF82+wHhfNoc3kbtImo2l/?= =?us-ascii?Q?w2iW8Tzi44pD293atB6fAvTD7/MeJHnj7e5/Fkm59rxCNxJwnIzw8JyfxU7D?= =?us-ascii?Q?QscDFjCpJJPfAD6Af2gFUlYEnf4rcPpvVdF59mRXLvax46SDr1aVLJNYfyxb?= =?us-ascii?Q?8zRMdqG/hbtUUIHeNkFJucoRFBiTm6zytszuMJpIGwNeBL9pRcl1tuuq3iQE?= =?us-ascii?Q?QaPwTRd9V2XQ9QC1jyQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Geg+FS5yzbeDpTyGZ8ZS7cN1qnUU0aNVBBnufRswaGDzyX0cvGeNEc2NtlqO?= =?us-ascii?Q?LgvXZxG0UGl4Q9KEwMK7tIekCznlLD6wvakSfZIuawdNZ8Ua3G56DzmLPMRv?= =?us-ascii?Q?pWMh90i8ZdhE0ufzOiDnBBqrxWedBcAgi88610wZ2FUydbfytW5IsaWO+bdx?= =?us-ascii?Q?3mBez7O7pVdS812Pu+zOOrbib82S23kriUzYZW/29qTWiILXR4UqhBfKQhXW?= =?us-ascii?Q?4EOW+5qKL4bpwGEMALYew36Ca4eydapkcclILTusVGiuyhaz3yzGkzUzJO/N?= =?us-ascii?Q?KAjO8buvOuJuB87djHNklOEsEjtVvYa+rbfhtnPcrPlirJQfsyd3efwsPjZM?= =?us-ascii?Q?4YXNjgv4B5gHJQyToPEoxCNC2gqE3tE8K1tmn5vJWi/QE+VKoHwUSYugeGIq?= =?us-ascii?Q?e2imMyekpiYW6hIU4yQ/O/Z4+VTYyssxHle0oYwPk4fJ55wKqUWv3kNKo1V3?= =?us-ascii?Q?a0YKdOMm6VGAQu7BgFc3d6E/m988D3lHUEL7R/vv2Z3tVTJ2IZQtj3MSpZAP?= =?us-ascii?Q?sUwlmVPffERifThRQhmvE3vkpGdln2U8ESD5dMKQ9DXsn70UzNbe+aQJNGMZ?= =?us-ascii?Q?9h+0xSaoA/TMO383mSO5iqfHDLQ57muNFDaF2sYvb78jCcL+2sT3rhNhalFI?= =?us-ascii?Q?nGK5LyJBQnVdvjnJ8fEzXX2oK2emtEh3BV/kWDb3X6Z51BSKW+Ap09A/9lth?= =?us-ascii?Q?IzDwlIUw34Zx1zPUnrXaNh5xukPnhzrY/pz4V251X8++HM1E0RbqZp6sv7FQ?= =?us-ascii?Q?NTOn2qUtKVO0RR0nwDnoV1HWqVmaCZv3MxMFmB7nYQ6uM7kxWF3SRCNLsU0A?= =?us-ascii?Q?paEdJ4xbeip0wxGvpKlF6SibmOGL66Y1FGOo6qvPKYS3zCi/RaQfRFETvzSb?= =?us-ascii?Q?tfZ7tSXM2VbQnktdT5ttSbXd/GPkoeNgAfJ0WdWkuFHlPOAJbPei+0TZ9JN5?= =?us-ascii?Q?EPz4HVrytjQJK4Cme4vnKbWUnHfVF/c97kqAxkA7i50ZDvz7BmxVN7zrcwkP?= =?us-ascii?Q?xyYus54jERPbJa/iKxbIyo+Pra5R2oYliuXUUOMPHOxjU1vvRpNzC2gkv0Yt?= =?us-ascii?Q?37UVz8wIaNmOEZ0xmaX0PfFemvIr7PfK3UTJ0I8rHYAvDL/5uApPNvDr50+v?= =?us-ascii?Q?J+93cno+GcRSabXSZLGBEPu/MHL9azrHa56kjRrMs9PGEnut22yayYDKqchc?= =?us-ascii?Q?HqOmGMT4O+Muh4pdDps+bVIGovhi4RTaqc7hFy3VHJJEHXruI4P8Z0aabtKx?= =?us-ascii?Q?ivHxsvJYb1/YAIhknFlYQoUytB8ZXHBE2OhKSMJRwq3buiscqhMc3iryRPwV?= =?us-ascii?Q?QertXHcGlNXiuTFSOD9N7xE6uCYfDMrJevHQ9nG/RipJVdY7i64kN5xX+qhc?= =?us-ascii?Q?dtuhxecLIfKeDSh2Lf7AJpJD3Hty3NyK1N+wXX270iblORkH4gFr/Crbf9l2?= =?us-ascii?Q?BG9QTKELrhC8rbTof8duKzMsdjP6ya+kai/criibINIdapVDrI1FiXRpYiIk?= =?us-ascii?Q?xfaDYDtaDXgf0JE0D+D6j56rW+kRR/yLDSnelw+G/fWW2vddnJGVZunpA8t3?= =?us-ascii?Q?LUypyIjNatJ4vKCHLuMzD8afObbhyqWgGQFa1KGzv3mjUCtTymoMRmvJ95Vl?= =?us-ascii?Q?/4BY3qPUNGBaLY4prgj8/QCfYFGabDepUYMTFTejXqSVCmXr3dXpetAgF8H5?= =?us-ascii?Q?VfPgcnsIFgscSm2L7Zooj+eI4VmRNa4gRbZEaPCEU1BCIRBuUS+f5111Bi2s?= =?us-ascii?Q?OrbZb3R8cHBoAm+hppyuiEp2k7Yheqlggn+XGWFtLxN/IXy+MsHR?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: b386112d-10ec-48be-e744-08de65a4ef50 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:26:59.7620 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nn8Sq8ATplQe4Cogij7Ekud67bm04aYbtqA274/1eg8v83GyuK5AuLnFky7pV7WgLyxr1zXZNN9bxt0tYhRbAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Allow users to request the embedded doorbell variant via the PCITEST_DOORBELL ioctl argument. If the argument requests embedded doorbell, program the endpoint-test FLAGS register accordingly before enabling doorbell. Otherwise keep the existing MSI doorbell behaviour. This is used by selftests to exercise both doorbell implementations. Signed-off-by: Koichiro Den --- drivers/misc/pci_endpoint_test.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_t= est.c index 74ab5b5b9011..e484bd47c7fe 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -77,6 +77,7 @@ #define PCI_ENDPOINT_TEST_FLAGS 0x2c =20 #define FLAG_USE_DMA BIT(0) +#define FLAG_DB_EMBEDDED BIT(1) =20 #define PCI_ENDPOINT_TEST_CAPS 0x30 #define CAP_UNALIGNED_ACCESS BIT(0) @@ -1050,13 +1051,15 @@ static int pci_endpoint_test_set_irq(struct pci_end= point_test *test, return 0; } =20 -static int pci_endpoint_test_doorbell(struct pci_endpoint_test *test) +static int pci_endpoint_test_doorbell(struct pci_endpoint_test *test, + unsigned long arg) { struct pci_dev *pdev =3D test->pdev; struct device *dev =3D &pdev->dev; int irq_type =3D test->irq_type; enum pci_barno bar; u32 data, status; + u32 flags =3D 0; u32 addr; int left; =20 @@ -1066,8 +1069,12 @@ static int pci_endpoint_test_doorbell(struct pci_end= point_test *test) return -EINVAL; } =20 + if (arg) + flags |=3D FLAG_DB_EMBEDDED; + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_FLAGS, flags); pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, COMMAND_ENABLE_DOORBELL); =20 @@ -1173,7 +1180,7 @@ static long pci_endpoint_test_ioctl(struct file *file= , unsigned int cmd, ret =3D pci_endpoint_test_clear_irq(test); break; case PCITEST_DOORBELL: - ret =3D pci_endpoint_test_doorbell(test); + ret =3D pci_endpoint_test_doorbell(test, arg); break; } =20 --=20 2.51.0 From nobody Sun Feb 8 18:39:21 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021088.outbound.protection.outlook.com [40.107.74.88]) (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 A6FBA3EDABB; Fri, 6 Feb 2026 17:27:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398822; cv=fail; b=ait8kz7uMszm4RV3EZvuzZosigNU1Q50JgHQXRTJsnmm6rZAuIZGL8TlQNiapgZnna1/OuTH5PnXgXtggx6YEowxE1apzB3BBOJjJ9IOMfwknJecPQP66XHoeMj2A/+qdjxrVz5S/mWcocIiptup4ia+GgCeRNtMLSvFYrpWHhU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770398822; c=relaxed/simple; bh=TN0AdwGEEWwixWT89708Gph5G8Gwql9DcJ+/3hJCs+E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=n+OxcVtxyii2K8wL1UrbO7XPmf+g+yy3LimiT7r0BRQqJjTqTAmS+zxNXBgYeFM2DK5m/Fyg4j9y6+vXI1aPq0IsMgJhkwOH1ICkPygmu8uKL7aJUB+zHmWYkW6EmdsPKztkx7Zw/c4GkzasgJL8t39Mnr7pAZhsYKFWuP49iZM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=ZY2DxWdz; arc=fail smtp.client-ip=40.107.74.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="ZY2DxWdz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EsFESVpJ4b9jgpqdlhIYJBKj629ZGEN8sMdpo64Yxo/uLYayK9q5ICBI4bzBgTIihX+Vaz2Zvsl7r50AA918hYkf8LEn7i4iSpePJNP96wFD4dMIFz4I/cFUWH1dAo4es0kJzsLKVH/I9PBJf5dGwvrYHbsV5GofKYWCQtovzq+erZ7OyKs3H+mOtwmJCHZzBBLAWujcqVTVoWGBfykHKVntZA9ha+C4a2MJLv9ZIJes0lOrPZxTNokzSQxlmzXN83UVTft3BuguGbaemyxOSXb4t8s9khpbwOfu6Z9r4zlTRwjKSnQtV1rdqklQdvd1YCzo087F46u1nBAARn5lBA== 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=EdFsTuNeimaSs3CczSHbVkvns0Qg/fpd+p4cz603L10=; b=DoMWPwdTkjaTIe0xXoIuNmtzkxLqs3jgnAgz8KwT6I2jMAOhIlFc9vt2OaDJrs8WIGlo7VTRS7ebX+i/gUNBa91F8NHv5oJx8UDU7sJsqvZjXr4UCKpNdG8mtqLEx+qY+viTDiz5tG6fLisC4FbvcLSOqNcicgVuMytUaHiI/efYgIQ0cDX7MUbeXNy759Lbg3s3ygMOjCpbOCferUouTnOwRXALdlkINGwdDhXkStiFTkg/QbXUeyGSI1T07klo57iSKO6njrZEPO2TKjZS+8uhp969sH4ZAZAA5dQVhLHj/Z9BhtRJmUD9dyrpznqdgT1tEPuFrjcObQQPhU/iNg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EdFsTuNeimaSs3CczSHbVkvns0Qg/fpd+p4cz603L10=; b=ZY2DxWdzxFCl/a7VpJPLA9kZJTR0mVEPfmUXTl03sfwmKM1MqBuo+xBLA/sNToItIFkJ0gYNHSeZBqmhkbwD5wtaVq2ifuk/nlYfyQgQa83i3awZNP04x4jMQ2xkuTRbuQADAAxqU93tRohP1IHj6E7zO64+W97fKe0oUt0DxdI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by TY7P286MB5571.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:1f1::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 17:27:00 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 17:27:00 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 9/9] selftests: pci_endpoint: Exercise MSI and embedded doorbell Date: Sat, 7 Feb 2026 02:26:46 +0900 Message-ID: <20260206172646.1556847-10-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260206172646.1556847-1-den@valinux.co.jp> References: <20260206172646.1556847-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0163.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:383::10) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB5571:EE_ X-MS-Office365-Filtering-Correlation-Id: ab121dfd-a2d3-4cbb-ce0f-08de65a4efc0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|10070799003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9F9jVztnj7ifabyRTF9aIhcybVCA0uyPYC7o0838yt6QW4klr2hb/CWioB0U?= =?us-ascii?Q?fphNrtlXi6QDuGXId6H1cRWnEIxyZa8l8/ogX1JvFFYN35t6YqW6rgiQtp55?= =?us-ascii?Q?tbTJT8XzcpNFnbut2Tk/NtniVeVMnqTvT5GUfxLpVf+vse6sUbgKqHYtzTaE?= =?us-ascii?Q?7IXaTI/7fapPRpMbdlaGD1LU+UW45NZ2ukIp5NS5mRoYZ7Py8WLJQd0AmxXW?= =?us-ascii?Q?OCfpFPNabxI/HJAGDbUZ2HCTTqsI5zCutad/f9dZqUl6ZTFQgPliDXOrpkIH?= =?us-ascii?Q?zUFTLYMhKuKCy24VUbc/77YRnwF2yl9ywHKkWswh6i7kKh28cO694I3aaL8r?= =?us-ascii?Q?wA7Oy4kV9zEWnt6xTirP+gpbvCRSIWN8lx8iTVeOiR5p1z3SmVWLRVGHCnl9?= =?us-ascii?Q?K5VD8r3SqIMtQ3gnZpVVt214+us2nnqSXZOj2JVioaOTpKZKZt7OKChVox6N?= =?us-ascii?Q?Etl8c1+nqWJq/7zgA+KfvsovGfWCazU9HxjGhJqSGe67TSfYx+kC45vvTwmU?= =?us-ascii?Q?CKlszytBoX5RT3FsiljW2yVPNZWvd/BdV6yzVv0KboAXE0vhl0S8sjQ+MsEw?= =?us-ascii?Q?vfmyxxhyEXARakho7hPxNTMxHERz6z89A5pT+rVZPL/OcbltuczjwdqwEVK2?= =?us-ascii?Q?nfhUitYZZrvQJztkuIwTkC42HweDLpxlueZTZHPzY3zJNifQLeuEEtT5ls59?= =?us-ascii?Q?R6sHcICzj4FHs/HxZUn4QIwTbIEOhjYTjLSAmb9uNAYp/EWUisgGLQSZu1LU?= =?us-ascii?Q?rZxs6FCM9t++PfUBI/eYVuE7+a8lOo6ItoaxOSigw/zMA2tyHRbvAM4t1Vyv?= =?us-ascii?Q?gKGNSIdqFmD01XoQdlAR91tLGnGur3IaBmp2X8AH1u91NqbAtcSzDzzmo/68?= =?us-ascii?Q?0GZWiQiDImvkpjeUZUBs9TV0FD+HrY27tYIEXf57itGluV99ofMQ1MwQYrUY?= =?us-ascii?Q?i4IrKCw5YQv1R/j2Gvlhzzo2Bu7pdkXrcqulsOevgjLIm3wMBMabCbKuW2Ed?= =?us-ascii?Q?B2AsuLp8onvUXdqAJ3Em3tD6CM7ZU4UEyAJzKB0GQdifGJDIVIH/lwgXU2Tp?= =?us-ascii?Q?2xA2j5XYJOPq5I34zITgT5U1Vz0LSEIv5xTX/7JMy8Fr1yZbeXj+R4n1Pr1q?= =?us-ascii?Q?XKM3fUcgzNn62EdehdZZynK7+yeezMYRJbA++D9vmyng46gEtqE6Vlx+A2em?= =?us-ascii?Q?KkZ2jDTmWJSUna3fRbFycuieSSqJdoLdWiQtkKBRB6Hr+810dOX1rpksNNS7?= =?us-ascii?Q?446GmR/OlBYsbE6AODR7xHqNrvjVxifZDTQLYteXamCwMnruOSqY96gYvUBA?= =?us-ascii?Q?e5jWdiwbGF8F9V2VvzYZf01TE4Dy6Owj7LNj7LRoQHWt9BTnEOyDpqb7uWbB?= =?us-ascii?Q?Qnvt3A8d32enOVk7EqI2IMj1w/Gl4v5N3BWBWT4Ym0/XUy1Qj2LxemdSLxmN?= =?us-ascii?Q?ECpLbJ0d0hsMXUCXTsG1Ffim2pS5OJdoOJ/yQkkZEZfUfn3xbbAM7DH+47hS?= =?us-ascii?Q?gpFm7qWofpTAV/sCJ6cvXXum0xlh3nWEuZwjERuB9rC9RBYrB+n6RRu1Wj64?= =?us-ascii?Q?9+1fzjF5EM+Arw05jlw=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?g/t/dNlTrU+X7/kLus11C7LUdceLm6YP896woQAbxRVTpQDyTL7ZFYlr9mkq?= =?us-ascii?Q?tsZ4xtBhK207GXuNkWMSbZ+4oL+5yfJT9qs9QGkH6qei7NjRHgoklEEoLuxr?= =?us-ascii?Q?CwmnX/u9FcGBDgc7D9G2D9n2KI+0BPFV4rIFDA7b8SzJpvq9lowmUkH5ePB2?= =?us-ascii?Q?scSBtYT9msKJu3iW57A3Q4qP4XsE/apVf/ELvD/EgKoesLSTepyCIcTqDNmu?= =?us-ascii?Q?a8U6mk6+z2MKHgQW4aWQtyN2DbJ2C7IOvvNlV5IinpEC5aliqPvxk9d7+hJe?= =?us-ascii?Q?ne80Be6SEHh0eXpgvVkDsTmwr1X+SvvwZCUYa2nXNzHqUAqrkr6Z5Yn56d5Y?= =?us-ascii?Q?F0ifaMMKUyWSgIYt/ZNFJnznlJEsUl79NRBc4h+ys1xeuZRARNTeVB4+Y2zx?= =?us-ascii?Q?1WBdo77qdc5MmWIfdqX1y7kmctAwJixAce6Qcx0ZyYvQk8KX6mrW+jbN6ONN?= =?us-ascii?Q?ztMZx+Xx1Vet/wc3QtVoCA+sSe1AohXYHp52ZwZ49Q4wl1EIHT2M/x+W2V0R?= =?us-ascii?Q?eQYsv19gJsf8y/z2W12PelQlkGfhDe4HLRVCfinx5oiYeDMRe4/oJTTF53pL?= =?us-ascii?Q?2PVKxqcVH08DE6eHJtC9sP8QZs/dJt6TXcmVi1c4VPEOl3TekhrJ5PvUyKDP?= =?us-ascii?Q?wLUUwM53wSfoZ2Y+s55FecL9MQ46mT005kZzSB41T71J3YIpvV9qLzqogTjM?= =?us-ascii?Q?j7fWFwCPp0FoWN1WPNrPpwITU4bQ/7Bx6hHf+ne7IZlbv6iUbm66bt2N+nG/?= =?us-ascii?Q?srCZ0GkA3K+oyKlsz1ewCQqR1tBR5Yk3n2hdEbf/mtrrTYQH8VRb37xZPrBD?= =?us-ascii?Q?nnP4/bxPEi7m4pmJUV0+WwdZJVmG9tvYOv9VagsTkUNjUH9pgdXJ+nK66UV+?= =?us-ascii?Q?w3/5Tks+MgglLXinmNmkE5zrAJAfxa/t4i0kbbTGOybEhqCKMFk9L7Hx+w5d?= =?us-ascii?Q?mzA2rErRYk1qiZ1Rw3Um+FTcMcguRYZyyAH/85exUq6+N5ZyXQQzfFlN3LQ8?= =?us-ascii?Q?kkUNAqbYtuzpVzgGSgFCHBmeC0Pw8iT7oCwa0epZYjKi7Ovwb73ZEd6NtnUz?= =?us-ascii?Q?rxvqpiWpd/4YFtD8e+9zPstz91HcYjY/5dbbJZT37NKeIJSjmjo39iQD0esr?= =?us-ascii?Q?52Bl9axSZEEaZslGPoyhhvCUvAqHZycmTP8DpFPSjIziZh0afVAicDxGiFth?= =?us-ascii?Q?NUe0FjoYkdRfa+obxFZd62n/x6/UmLKtMUaafkR2fTEVGV3xWFdGXfcIUjLH?= =?us-ascii?Q?Us9uFsRLM4i4QDKJuaz0gQ2d1HFb4/n+HHxJsUnGklzVTXqiKUo86KWmQok1?= =?us-ascii?Q?zrfi8NM+8y9yxlvFwGzh+diGnCh2HcpfTop7V7l9KvYJT9q3RNQzNtDICn8V?= =?us-ascii?Q?9/X+tXirsk7SQ9mDokf5bshPQVgfG/LGo/JN5G9nwibKSO6vF6VBCM7wRX5N?= =?us-ascii?Q?jKSrf3IBW5uSQ4GVGWvJQUwbMclmI2MSMyXxuWxgApOuc1h+rRqS9mxT0VZL?= =?us-ascii?Q?YplsqCvXN+FtmSS31cy2kkWv8GfeP7qYCqd8zT94ruvYqtAnSU1ZgXHDQTf9?= =?us-ascii?Q?dn1mR5NNKH4U5R4/i6xn+jsvD0ms4gDvjQEMoMBgx+BQDQOhRhUkyUYkkxZz?= =?us-ascii?Q?y+CrqC9zzEsNiWzfvjHWB3sYkrDBi7D3JJfEHpVQQBmsFfRLdpp3pJd4kXTn?= =?us-ascii?Q?tXBoUlwPHZyE2g7phLphjMUG3dLfULZUN6C/uiRyzT7gljj+JLoCaM03btnw?= =?us-ascii?Q?fMhR653VhT+Gwq419rccZsIE85P3YEP4XwdcfNYUq21/EDYTZSDZ?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: ab121dfd-a2d3-4cbb-ce0f-08de65a4efc0 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 17:27:00.4988 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JXtHxtY0aSVn9Kclol7uECEG/vMEYPx+R9PzXxDJMsP1v/c5FsDRU/H57rvHu17q2ObOGMDjb9nEc3iYfirgwA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB5571 Content-Type: text/plain; charset="utf-8" Extend the pci_endpoint_test doorbell selftest to run in two variants: - default MSI doorbell, - embedded doorbell (requested via the PCITEST_DOORBELL ioctl argument). This improves coverage of EPC backends that implement embedded doorbell support. Signed-off-by: Koichiro Den --- .../selftests/pci_endpoint/pci_endpoint_test.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c b/too= ls/testing/selftests/pci_endpoint/pci_endpoint_test.c index eecb776c33af..b3c79fe3b828 100644 --- a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c +++ b/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c @@ -268,6 +268,21 @@ FIXTURE_TEARDOWN(pcie_ep_doorbell) close(self->fd); }; =20 +FIXTURE_VARIANT(pcie_ep_doorbell) +{ + bool use_embedded_db; +}; + +FIXTURE_VARIANT_ADD(pcie_ep_doorbell, msi) +{ + .use_embedded_db =3D false, +}; + +FIXTURE_VARIANT_ADD(pcie_ep_doorbell, embedded) +{ + .use_embedded_db =3D true, +}; + TEST_F(pcie_ep_doorbell, DOORBELL_TEST) { int ret; @@ -275,7 +290,7 @@ TEST_F(pcie_ep_doorbell, DOORBELL_TEST) pci_ep_ioctl(PCITEST_SET_IRQTYPE, PCITEST_IRQ_TYPE_AUTO); ASSERT_EQ(0, ret) TH_LOG("Can't set AUTO IRQ type"); =20 - pci_ep_ioctl(PCITEST_DOORBELL, 0); + pci_ep_ioctl(PCITEST_DOORBELL, variant->use_embedded_db); EXPECT_FALSE(ret) TH_LOG("Test failed for Doorbell\n"); } TEST_HARNESS_MAIN --=20 2.51.0