From nobody Mon Jan 5 11:18:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2611E74911 for ; Mon, 2 Oct 2023 18:38:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238799AbjJBSiZ (ORCPT ); Mon, 2 Oct 2023 14:38:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238747AbjJBSiW (ORCPT ); Mon, 2 Oct 2023 14:38:22 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2076.outbound.protection.outlook.com [40.107.6.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 807B99B; Mon, 2 Oct 2023 11:38:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MCqe/o+6BZHYOekuqNCR/XYCzzbojao2xy6aE3Oj355HVFHtuQZR8Y154+iOFs5cKn5vwKO+K+LaWitYRA93mlesDZfh1ewULrueIf+9auhrlhgGoyyaxxFKh0LBQt5YPf1/iOd2+K+RmPKDiW+8XUTPJbuCtXmpz4dIAYjV9oQCf87/H32Mb+IZAcLoGoNu1Is0QRsxd5W3CBALvzTTd9ztUDRCbfTVb0SzUAOtpi6wMhrluJbq4CNBaITh2KUk4eHPKhbJC4SfrpFzZY61cTikTa/cuFZWPngv40RtwyuDoMM5CsIHswrsCN1G5HcKXslxq5r586HKBa2nI8ZCKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=vE/E2an+MC2WTwMy3CtHu9jt6k/DAy24enLTD5MbX6g=; b=kuD11T/v6BPPrOlW3/AOh1m2fNHl57rOqk8opzYY1z2rBLuSOlcVHBSPnzrNVqk7sY4G0/WG+Lh2iOGACMs0k99uDK7ucCXqBngXEZ9F2hCsuYWuqFnelYtzraxL0Tv884VDCW+he4MHbWzIYBPXVKgW0nRd1rgiol5xrbaHeaBjaT0sXn8TN6WLOTsovq4CYsdSWf9+3cCHtcsPNXjPfbuDrPEnBCb20Re0SftAEaOnTtM9bgTtzVS7crwsvmh6sJdFI7h1Xg9FtIw2QIarJShdVDmhhh26XJRki1KeVHv/XffhmnqYgogeLVXBJf9eJL8D84iWwgeRqASa/f2Lug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vE/E2an+MC2WTwMy3CtHu9jt6k/DAy24enLTD5MbX6g=; b=q6JdHP+F+HciG9OaU56P/g8cPXnwqqSTR1Il0ZhrJ9og4h8B0JNrcEAQdtD2xal628ER+FuYq420y/4WhSCTvfMfk4ClmMrO2ZqghyX7ou4s/gNYdNIui9naMEgFPcvQYH+vMw5KuomqqgtUPlWsZmr+BN2HWgC1uckLyQPTMRQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DB9PR04MB9283.eurprd04.prod.outlook.com (2603:10a6:10:36d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.24; Mon, 2 Oct 2023 18:38:15 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::1774:e25f:f99:aca2]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::1774:e25f:f99:aca2%4]) with mapi id 15.20.6813.027; Mon, 2 Oct 2023 18:38:15 +0000 From: Frank Li To: arnd@arndb.de, vkoul@kernel.org Cc: Frank.Li@nxp.com, bhe@redhat.com, dmaengine@vger.kernel.org, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, lkp@intel.com, oe-kbuild-all@lists.linux.dev, rafael@kernel.org Subject: [PATCH v5 1/3] debugfs_create_regset32() support 8/16 bit width registers Date: Mon, 2 Oct 2023 14:37:48 -0400 Message-Id: <20231002183750.552759-2-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002183750.552759-1-Frank.Li@nxp.com> References: <20231002183750.552759-1-Frank.Li@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR07CA0016.namprd07.prod.outlook.com (2603:10b6:a02:bc::29) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DB9PR04MB9283:EE_ X-MS-Office365-Filtering-Correlation-Id: 843d7dfc-7c23-4c50-f680-08dbc376bd63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: be7wXyLS8wti8/CpW/oIAHj7jWrgS0wi5fi181hl4zhfx2Z40pZVbvmu7KRZLMT+kWPSJ7n4DlOu9VL75AlJ7Z6ElkEpYPNwlSGTBAzamyL5Fqf/akhQ8pOYGQ13JacFPOki3UXTex8YUkOaKQaK0YK+eBBCSLQdmMshmhmqhcYGzVC2Z1ayG8sYL6tqFMXDrJKSKYvvXtwFvy3/MRvtYpU/alMuzAsaF8vMfQA2Cy9p/51JTKeacqT8zL4x9G6av4+Vw7rhh7i46l9TwXaSttOkRvnwt+q38MgQf7JH+6Hx2dVJujyb56BEMIcOMcLc3ytKha2WGghpdi3SjZASrYHQstlvTJUAqyHRzatuLz10mzQQXyST1jhBcESDoBf/7yBF0UeS5fKsl9dFs7+KYd6f3eDeSm3lQtMFvsFnWzFWep99mxKnFeFzdZnjBVu0yVAkch5NT21tInqyA1pYP4T+ez2+NVRZM3Ugz0bxPlN3/TJ0iGsNt8jK5DKHQBrhcAL2X4jzRSKHWG+uy/QDpdn5a8pJp6RUps4vkeeUeYuT2oTPrmU81FNDbiko0bcX8IK0RO6t4rz6MT9qQD46vAwW+CMSk9NXl/MYoOKH1MaKyBHWtmQ3O1HJyac/OSBU X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(136003)(376002)(396003)(346002)(366004)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(66899024)(52116002)(2906002)(7416002)(41300700001)(8676002)(4326008)(8936002)(5660300002)(316002)(36756003)(66946007)(66556008)(6506007)(478600001)(6512007)(38100700002)(6666004)(1076003)(86362001)(38350700002)(2616005)(66476007)(83380400001)(26005)(6486002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?V0bFeTwWm1pleQHFAj8NANR6Rsv9MEOjDLKkfDubW8we+P36do0OBZItJayE?= =?us-ascii?Q?KbR0QmjHuSmF4cC5W9C9suP9+rliMZRmfq5BalfD5iUGU5x4lpQbzxHd676E?= =?us-ascii?Q?nRd3m79d06jRZdKh1BNMhDNs20JWUf7RPCYwEdn2efd5Rs+3trlyuNs7KIln?= =?us-ascii?Q?3EtiNjB4hhog2JkKgKux7LLrU6CBvZ0EJmNrYzNgCrsaF+b/kwk2GMuBcCGa?= =?us-ascii?Q?6ryuQV+0mMYBK6kpMGLV05kyYM3yeBB/lI6diGyl/gwUJhmRWqERh9X5Hrn1?= =?us-ascii?Q?mbCniMXizrgvC97yo1pMt2Ri8m0NKtKE9OW4gSIY1WfC9pMa6xxL/feWFW5L?= =?us-ascii?Q?WeutKesm9ubU9LJlZ3aDYXqqNhMpsraZoT2BSrjOTbY8/ipJmRxcDleIig5A?= =?us-ascii?Q?hfBJdyotdOsw+DVmxYYGNx9s8CIMoJ27XtROe4YxF3nzfpKqya1N0JQ40up8?= =?us-ascii?Q?znIo5WbzRlx1QskTiq1yB7HThjiOIl+2UHNVZ4uSdUQtk+AbU+FLh5QYMle2?= =?us-ascii?Q?53o/JTtihpJMWbCW0r+dOawhJ2kFR71isNlDnNgGLA/wc6ezCOMkIewwBtGv?= =?us-ascii?Q?G2XAIxQlZzkYPvP6HP7oFeMrCBH7YhSHU4AbRsvYDxqMAbxuKX7Lo/2yghwv?= =?us-ascii?Q?wU8vCAaqj5UPW5oPqgqunHbaC5yPe+89xqSnLmbQW3eAB4h2cz4Ea+jsyR0M?= =?us-ascii?Q?NOsiJqLqPMQeEZId13K7we7I8sLLUhThEH40wcA/hhMzQofFeiunCkF2R2yN?= =?us-ascii?Q?zYBQO9kVGQZtf0I/MRdlqIXkLcRd6FJ5GGZuAszNzQT937efEU7L/81nviC3?= =?us-ascii?Q?4oruKL5ObOhxa6JjjfdCYEWiqt/UWCTgxgaojxrYrkJerrfFR0TAlJmuLvLn?= =?us-ascii?Q?RfDA51pGIYSotlmugdbMQ2IGRV+55xQBUwCGGLuu8jlxSa1HP96yLn6GJABR?= =?us-ascii?Q?yCJezgKDC6w5Q6dhKJbKEHWwK+JGIFee/FeFetnPiDhuVRCd+WNi/pB0LFuM?= =?us-ascii?Q?1N7Mk5TQ1klc5Cs+ELUfVQy7Hf4rp1o+Y+3QB4uZLm4QXUH/E+cXB/zrJlqr?= =?us-ascii?Q?5FcD/isIXbsjMFFXuLR2UOa4JRlEuMAc0oi81cZ3QphdLrDRUay4CrX9QfC8?= =?us-ascii?Q?RGr/4iOWyYxd7XHLa8PjY10cumLNlxJJwJKEC5EbKxPArCggP//+jOosw7St?= =?us-ascii?Q?9PNOqp4D2VHa9W6XobGbBJv+vK5x125jIUzHvAi3zjHFb/Q6UaeA+94JeuN3?= =?us-ascii?Q?X0fQ92B2weMDoiXrbVteEXd18+eTa3pzz5dCmSuudEl656eDCKLNXTvb6qn9?= =?us-ascii?Q?BdZcoRyyVX4eLcdBk4Q23L4hNXFuJwxtHfwVsdvO444JBY0jpzcCAsHPfsYb?= =?us-ascii?Q?FgqLSZOJDaeyb55mzrNtENHyKsVZRnmMJVpSQIuJjPOoUAO1TwBFtpgyTcn7?= =?us-ascii?Q?YG6V4oY0zFKLI3IsEKMYgkIPY3UnIT6+Mi3qKdQv8epnWQY9t2OduRR4WMQB?= =?us-ascii?Q?Ir24n2Xk11aNezKKbdPAJ8nBUXGTdGPN5QSV9ByHNclKZRmWT0Xu08KA/Ktl?= =?us-ascii?Q?5GkcgzcSnFdkZjupe7b1mAUeW09VCqTUJMGug3VR?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 843d7dfc-7c23-4c50-f680-08dbc376bd63 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2023 18:38:15.5601 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ThWc/+4UbEXe1ZSQ3/2MpInLh6s9rMcaL5TgRePx4PDpGr/D1Y7cqIDYjM6eti22qpDjLQuC7g2nwsSbSJKSpA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9283 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Enhance the flexibility of `debugfs_create_regset32()` to support registers of various bit widths. The key changes are as follows: 1. Renamed '*reg32' and '*regset32' to '*reg' and '*regset' in relevant code to reflect that the register width is not limited to 32 bits. 2. Added 'size' and 'bigendian' fields to the `struct debugfs_reg` to allow for specifying the size and endianness of registers. These additions enable `debugfs_create_regset()` to support a wider range of register types. 3. When 'size' is set to 0, it signifies a 32-bit register. This change maintains compatibility with existing code that assumes 32-bit registers. Improve the versatility of `debugfs_create_regset()` and enable it to handle registers of different sizes and endianness, offering greater flexibility for debugging and monitoring. Signed-off-by: Frank Li --- fs/debugfs/file.c | 53 +++++++++++++++++++++++++++-------------- include/linux/debugfs.h | 17 +++++++++---- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c index 87b3753aa4b1..62cc96bb6d72 100644 --- a/fs/debugfs/file.c +++ b/fs/debugfs/file.c @@ -1137,15 +1137,15 @@ EXPORT_SYMBOL_GPL(debugfs_create_u32_array); #ifdef CONFIG_HAS_IOMEM =20 /* - * The regset32 stuff is used to print 32-bit registers using the + * The regset stuff is used to print 32-bit registers using the * seq_file utilities. We offer printing a register set in an already-open= ed - * sequential file or create a debugfs file that only prints a regset32. + * sequential file or create a debugfs file that only prints a regset. */ =20 /** - * debugfs_print_regs32 - use seq_print to describe a set of registers + * debugfs_print_regs - use seq_print to describe a set of registers * @s: the seq_file structure being used to generate output - * @regs: an array if struct debugfs_reg32 structures + * @regs: an array if struct debugfs_reg structures * @nregs: the length of the above array * @base: the base address to be used in reading the registers * @prefix: a string to be prefixed to every output line @@ -1157,30 +1157,47 @@ EXPORT_SYMBOL_GPL(debugfs_create_u32_array); * because some peripherals have several blocks of identical registers, * for example configuration of dma channels */ -void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *= regs, +void debugfs_print_regs(struct seq_file *s, const struct debugfs_reg *regs, int nregs, void __iomem *base, char *prefix) { + void __iomem *reg; + bool b; int i; =20 for (i =3D 0; i < nregs; i++, regs++) { if (prefix) seq_printf(s, "%s", prefix); - seq_printf(s, "%s =3D 0x%08x\n", regs->name, - readl(base + regs->offset)); + + b =3D regs->bigendian; + reg =3D base + regs->offset; + + switch (regs->size) { + case sizeof(u8): + seq_printf(s, "%s =3D 0x%02x\n", regs->name, ioread8(reg)); + break; + case sizeof(u16): + seq_printf(s, "%s =3D 0x%04x\n", regs->name, + b ? ioread16be(reg) : ioread16(reg)); + break; + default: + seq_printf(s, "%s =3D 0x%08x\n", regs->name, + b ? ioread32be(reg) : ioread32(reg)); + } + if (seq_has_overflowed(s)) break; } } -EXPORT_SYMBOL_GPL(debugfs_print_regs32); +EXPORT_SYMBOL_GPL(debugfs_print_regs); =20 -static int debugfs_regset32_show(struct seq_file *s, void *data) +static int debugfs_regset_show(struct seq_file *s, void *data) { - struct debugfs_regset32 *regset =3D s->private; + struct debugfs_regset *regset =3D s->private; =20 if (regset->dev) pm_runtime_get_sync(regset->dev); =20 - debugfs_print_regs32(s, regset->regs, regset->nregs, regset->base, ""); + debugfs_print_regs(s, regset->regs, regset->nregs, regset->base, ""); =20 if (regset->dev) pm_runtime_put(regset->dev); @@ -1188,16 +1205,16 @@ static int debugfs_regset32_show(struct seq_file *s= , void *data) return 0; } =20 -DEFINE_SHOW_ATTRIBUTE(debugfs_regset32); +DEFINE_SHOW_ATTRIBUTE(debugfs_regset); =20 /** - * debugfs_create_regset32 - create a debugfs file that returns register v= alues + * debugfs_create_regset - create a debugfs file that returns register val= ues * @name: a pointer to a string containing the name of the file to create. * @mode: the permission that the file should have * @parent: a pointer to the parent dentry for this file. This should be a * directory dentry if set. If this parameter is %NULL, then the * file will be created in the root of the debugfs filesystem. - * @regset: a pointer to a struct debugfs_regset32, which contains a point= er + * @regset: a pointer to a struct debugfs_regset, which contains a pointer * to an array of register definitions, the array size and the ba= se * address where the register bank is to be found. * @@ -1205,13 +1222,13 @@ DEFINE_SHOW_ATTRIBUTE(debugfs_regset32); * the names and values of a set of 32-bit registers. If the @mode variable * is so set it can be read from. Writing is not supported. */ -void debugfs_create_regset32(const char *name, umode_t mode, +void debugfs_create_regset(const char *name, umode_t mode, struct dentry *parent, - struct debugfs_regset32 *regset) + struct debugfs_regset *regset) { - debugfs_create_file(name, mode, parent, regset, &debugfs_regset32_fops); + debugfs_create_file(name, mode, parent, regset, &debugfs_regset_fops); } -EXPORT_SYMBOL_GPL(debugfs_create_regset32); +EXPORT_SYMBOL_GPL(debugfs_create_regset); =20 #endif /* CONFIG_HAS_IOMEM */ =20 diff --git a/include/linux/debugfs.h b/include/linux/debugfs.h index ea2d919fd9c7..247ae4217ea5 100644 --- a/include/linux/debugfs.h +++ b/include/linux/debugfs.h @@ -26,18 +26,24 @@ struct debugfs_blob_wrapper { unsigned long size; }; =20 -struct debugfs_reg32 { +struct debugfs_reg { char *name; + int size; + int bigendian; unsigned long offset; }; =20 -struct debugfs_regset32 { +#define debugfs_reg32 debugfs_reg + +struct debugfs_regset { const struct debugfs_reg32 *regs; int nregs; void __iomem *base; struct device *dev; /* Optional device for Runtime PM */ }; =20 +#define debugfs_regset32 debugfs_regset + struct debugfs_u32_array { u32 *array; u32 n_elements; @@ -145,12 +151,15 @@ struct dentry *debugfs_create_blob(const char *name, = umode_t mode, struct dentry *parent, struct debugfs_blob_wrapper *blob); =20 -void debugfs_create_regset32(const char *name, umode_t mode, +void debugfs_create_regset(const char *name, umode_t mode, struct dentry *parent, struct debugfs_regset32 *regset); =20 -void debugfs_print_regs32(struct seq_file *s, const struct debugfs_reg32 *= regs, +#define debugfs_create_regset32 debugfs_create_regset + +void debugfs_print_regs(struct seq_file *s, const struct debugfs_reg32 *re= gs, int nregs, void __iomem *base, char *prefix); +#define debugfs_print_regs32 debugfs_print_regs =20 void debugfs_create_u32_array(const char *name, umode_t mode, struct dentry *parent, --=20 2.34.1 From nobody Mon Jan 5 11:18:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 098E3E7490F for ; Mon, 2 Oct 2023 18:38:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238808AbjJBSi1 (ORCPT ); Mon, 2 Oct 2023 14:38:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238790AbjJBSiY (ORCPT ); Mon, 2 Oct 2023 14:38:24 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2076.outbound.protection.outlook.com [40.107.6.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C9AB4B8; Mon, 2 Oct 2023 11:38:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K90m1Ue2NGFbEBCLWCr5C0TYVbQdPyKxhutyzPYYsPRx0EWH4o2euhNNm6qEfNTuRDv52SEKjoYpnzyd5BhMtZxpwR/R5G+eMr/piqZbdb/zGGus2bM+pBP2cCfNgNZ/Jp7u+KfspCqSDznzSGfyY3gJV1TWnsZe7hDuUwYE/6Fv14aP0tGCizdT8fpG9tSRnuLHPJWelRAGsOWWbRakdn9TMTPN1mVdKTrGwhOXElDorFKKv5oNLk9+tZDJRxOvi5/OGel8rwYwcYQCM3myJMuQNYrMqD0rfEBFsKdga1YCtIJzBTv/mR4qrCUt2IySmu8cFlsDR9tF6D1nNmamyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=KrrRSsmz8JDYKRnhitxLdhGClwA1D4DSztdMBen7IAg=; b=Wdhng7PcUBa+TbT/eWlu/MsFUS+Ia1lX9FTJfnYvl+Gp1LFqYuMUEBzC3Qvd43uH/s6sWL2CRR/9FTqaFuYIWsoCVbD1joYGo1DtkbdtptgJWSPmuu1oDZ1PQloH1Iizpy/styeCjzMl6/cOiOojxi/b9P2ChcZdwKVrDRRSLF8lVoloYKbk6ZulXTuuPbHmvx0hG2v2JF1vKYkliyHzbnSZEhgkB5PqJV6Uig1+DJmMmpKMzVILH2sF/JiFTE6PNwvYWyVKnjo4JdEnx0ZP9uo0Kx8awuJ4amq9by2MipNJ3RDPVzR3efW7JFKIPDRokMg7KnUki6yGtil/wPS6Wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KrrRSsmz8JDYKRnhitxLdhGClwA1D4DSztdMBen7IAg=; b=lsgPq3WMOAeZF6+d79k1/8ne+ou9b7B+EqTsi9/thyRPg3SVZFOVGKOe3GOy+zAhXqJc4d41ou/F/4k9wu8ogxA895vM//1HUfv1fkhU+A5HDIyYML6NtAsdqc6QAMYb/jENyN/PMC/Q6auRWunhGxYsb+O2ILs1DIpqmje81Ac= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DB9PR04MB9283.eurprd04.prod.outlook.com (2603:10a6:10:36d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.24; Mon, 2 Oct 2023 18:38:18 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::1774:e25f:f99:aca2]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::1774:e25f:f99:aca2%4]) with mapi id 15.20.6813.027; Mon, 2 Oct 2023 18:38:18 +0000 From: Frank Li To: arnd@arndb.de, vkoul@kernel.org Cc: Frank.Li@nxp.com, bhe@redhat.com, dmaengine@vger.kernel.org, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, lkp@intel.com, oe-kbuild-all@lists.linux.dev, rafael@kernel.org Subject: [PATCH v5 2/3] dmaengine: fsl-emda: add debugfs support Date: Mon, 2 Oct 2023 14:37:49 -0400 Message-Id: <20231002183750.552759-3-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002183750.552759-1-Frank.Li@nxp.com> References: <20231002183750.552759-1-Frank.Li@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR07CA0016.namprd07.prod.outlook.com (2603:10b6:a02:bc::29) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DB9PR04MB9283:EE_ X-MS-Office365-Filtering-Correlation-Id: 8245185b-02bd-45c6-9f38-08dbc376bf1a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VMJxXemfUtfDNujqvk5IH+nbU/ZD0pqiM1XhVIYy3KTD6jDwsE8eGM8TX19hFJNJOtZyueQ3uuc+sTxrYgWK/nV95XXl64XYSyye4kY1+NYsaOcxzvYceocBg46Rv0tvIJvuzKoGm08DFgCufqyGoTEjXQa2/bftFHh8HuvuD1WMYcnB8e9LSzxuo7Sp1AYFdEzqiQOgZ+3JelwTbunBaQicHwvcrnilneFuCDTaWqsuS0it22YejcxefLPk2E5oalPNXtNLcP6C1Oyln6tfhS8nD7jpUKIAIVwpPlxBYEkIfIglVBal0ZEjAiYdy4e/ZXwQEMJG1rKrN5vJd2zTL7PBlUJe65hAM2xxyNQ3avbrxM6gSQ4E/1QjgR6kZE6yW9NGkrA5pHjaILbsH7d5sOM0lb12t4x+TDj23JXl1U2mIFo5LxBNRcaoG4v+e5z7ShgzTPjyJY1T9whYj5t3s9kWHGQEr/TEnE2riqvT6XwOA4C4acIkdPXL8i1KGJBTuk5Y20teDhByDbEf8KlmeCEqp+2Q4M72/6h8i/XhFOpW0VPuJIX9uajcEld/f1pjIHprt+Y0pB6DRHSI2cyb1b1DT8S++CnO2MGBFBcSqqKvhUHPHFkYugkM0ghR4GNZ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(136003)(376002)(396003)(346002)(366004)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(52116002)(2906002)(7416002)(41300700001)(8676002)(4326008)(8936002)(5660300002)(316002)(36756003)(66946007)(66556008)(6506007)(478600001)(6512007)(38100700002)(6666004)(1076003)(86362001)(38350700002)(2616005)(66476007)(83380400001)(26005)(6486002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dFBmKFYwGuoGfzxeSu9WkFE6BSLF75u5SP1VBbojbsey6oczbwTE7f+W/i67?= =?us-ascii?Q?lPQ2cv/sIclIxCH3ZuXugC7N+ELDHzW+DXGvdq6YNm0Zae1Ks50ePolIoHBr?= =?us-ascii?Q?kr5i1EJGNWkR56aXOibNseoJ6dmYHAHHkkhb6Vo6np0nQPzLwg8+Ys0CG8RX?= =?us-ascii?Q?z4avWz4MgJ2KEJLtPOApaKCLG4VPQv3vWPlgAd/NpLxz21K49J17rOQ2Vxej?= =?us-ascii?Q?91desngHWb5NZ8//1Zppx5TvJDIfMzx8RA1PLYuGnGGKyoIljmZPSl09ixUF?= =?us-ascii?Q?mM8Q3jHkUmvEa13YhZVRcD/SIk9LHkxPCN8z51p/OAxccrScae7DLtStjFSz?= =?us-ascii?Q?YspTMr1Ho9jpviaLDpo6YXAg7tJsj1dKa4VZmPwe4PpA6ZbmR+rlxBZHk/4J?= =?us-ascii?Q?Zt+xdAPjfD1oMiw6Yjf0WS90vTAtitY7W+2awrGbQUYjvv1P7u8HBqZV+pwb?= =?us-ascii?Q?hurosIcFJDm4YBUGn1KAGMv+o5PKEd+BAqFXZNWizEeaNcDPCYxyzi/sM2gp?= =?us-ascii?Q?8sg1euUU3U9jVkbxWT33CSE0D2J6HwdpuXjQAVY3oftVX0AMD4mK5dnkve2a?= =?us-ascii?Q?IpCE49IoTHk1NgqOpUVEX9aoKhgyIczm1y7EOgovMqEloUCWE6ZLZabk/JKG?= =?us-ascii?Q?zhQjzLwBNUtb8Xj9knUp2rzqeGKa1zOIv4zO05RKzCTOwOWGx/ulrVZn+O++?= =?us-ascii?Q?e6gpZeQpvcF779LlrzalY1ODJiPo8RwMKOz9fMFrRGtYvdSKkyZ7EwVaauUo?= =?us-ascii?Q?0XLwJwagnUohx6Jv6TRkYbesqZFn6Z04d7SWhqk1RJ1T5ccePPOgVhaTnusD?= =?us-ascii?Q?py91ZnOcmcyUwYQvg9z7zM5qGpl8tG4kSFZCfKmQ3y3AQxG+egWVF5Igv+ZY?= =?us-ascii?Q?qL0abmLC5+23T8UuKR3khKwJ0vQvP1lZULKHMIP1I+12gQiF0nFi+fsGRB+y?= =?us-ascii?Q?zuJqnVIVHAuyxrbCrJFlf2ASX69PzM5+u29xoCZxnn5aU7MnR7ybCYfNIGUZ?= =?us-ascii?Q?ZeO8X4o26zwxhHnbGHkzj9UFvvMGzgPLsx/QTQr5s0GuWog6Xk1njX3FkPkY?= =?us-ascii?Q?U2EzOlZW2eCDZYYGYAn86j/TtV85X508K1ibpz9/IUjri6iTySJRoUZzrniu?= =?us-ascii?Q?H8uxECUW2nsMJO+QQDBg//vb2WGcpcQD21P/xmfeIQC2A5ssbELOnxDGoBLD?= =?us-ascii?Q?9ZPBDB4J3NOLBDwmL0xUpH8MLsIE/47Kcwf0qFsmGTfMUC0eF2dTlbsjYReE?= =?us-ascii?Q?pXbA+TimhHyDRViMjGx/hXMsWmepCG6k1hUPkWf1cF8U94IfDxEpYRjNco3K?= =?us-ascii?Q?rf6efxq4wCJvOxch6SE+ja4t53u8H+pr6JHAzDnwvQjGRPUZOYKOzF7kWL3t?= =?us-ascii?Q?h68R0TPWdQ55q5Sjh4kzti8CzzS7HFNVbDzsWGQMLHl3r7462Ilf7QPgqdw1?= =?us-ascii?Q?Hzx0AK6TH9yc9y8SS42EicOJAOtKoeYrlihHp2CWLnpomNfu4Jq4Oemg+qYC?= =?us-ascii?Q?0TRjQ3tQVvGv0qrDZ8LrlvBYlkBpYupUA8AixTTqOQD/KjOdTIUc9TmlLPHJ?= =?us-ascii?Q?uHSysxWYyV0IqFRXo+WgxnoTPWjNuchodhsuD6wJ?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8245185b-02bd-45c6-9f38-08dbc376bf1a X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2023 18:38:18.4314 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: S4o06b8Tp/NZ7QQ4L2QLdM8Otc7rhZEa1QL8dlyFPrT8znnrwAdbawjF1SJWZ2NBhB5ltOLdKP0sw2SGbyKP2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9283 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add debugfs support to fsl-edma to enable dumping of register states. Signed-off-by: Frank Li --- drivers/dma/Makefile | 5 +- drivers/dma/fsl-edma-common.h | 8 ++ drivers/dma/fsl-edma-debugfs.c | 200 +++++++++++++++++++++++++++++++++ drivers/dma/fsl-edma-main.c | 2 + 4 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 drivers/dma/fsl-edma-debugfs.c diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index 83553a97a010..a51c6397bcad 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile @@ -31,10 +31,11 @@ obj-$(CONFIG_DW_AXI_DMAC) +=3D dw-axi-dmac/ obj-$(CONFIG_DW_DMAC_CORE) +=3D dw/ obj-$(CONFIG_DW_EDMA) +=3D dw-edma/ obj-$(CONFIG_EP93XX_DMA) +=3D ep93xx_dma.o +fsl-edma-debugfs-$(CONFIG_DEBUG_FS) :=3D fsl-edma-debugfs.o obj-$(CONFIG_FSL_DMA) +=3D fsldma.o -fsl-edma-objs :=3D fsl-edma-main.o fsl-edma-common.o +fsl-edma-objs :=3D fsl-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) obj-$(CONFIG_FSL_EDMA) +=3D fsl-edma.o -mcf-edma-objs :=3D mcf-edma-main.o fsl-edma-common.o +mcf-edma-objs :=3D mcf-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) obj-$(CONFIG_MCF_EDMA) +=3D mcf-edma.o obj-$(CONFIG_FSL_QDMA) +=3D fsl-qdma.o obj-$(CONFIG_FSL_RAID) +=3D fsl_raid.o diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h index 3cc0cc8fc2d0..029197440bc3 100644 --- a/drivers/dma/fsl-edma-common.h +++ b/drivers/dma/fsl-edma-common.h @@ -336,4 +336,12 @@ void fsl_edma_free_chan_resources(struct dma_chan *cha= n); void fsl_edma_cleanup_vchan(struct dma_device *dmadev); void fsl_edma_setup_regs(struct fsl_edma_engine *edma); =20 +#ifdef CONFIG_DEBUG_FS +void fsl_edma_debugfs_on(struct fsl_edma_engine *edma); +#else +static inline void fsl_edma_debugfs_on(struct fsl_edma_engine *edma) +{ +} +#endif /* CONFIG_DEBUG_FS */ + #endif /* _FSL_EDMA_COMMON_H_ */ diff --git a/drivers/dma/fsl-edma-debugfs.c b/drivers/dma/fsl-edma-debugfs.c new file mode 100644 index 000000000000..99f34198dae0 --- /dev/null +++ b/drivers/dma/fsl-edma-debugfs.c @@ -0,0 +1,200 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include +#include + +#include "fsl-edma-common.h" + +#define fsl_edma_debugfs_reg(reg, b, _s, __name) \ +do { reg->name =3D __stringify(__name); \ + reg->offset =3D offsetof(struct _s, __name); \ + reg->size =3D sizeof(((struct _s *)0)->__name); \ + reg->bigendian =3D b; \ + reg++; \ +} while (0) + +#define fsl_edma_debugfs_regv1(reg, edma, __name) \ +do { reg->name =3D __stringify(__name); \ + reg->offset =3D edma->regs.__name - edma->membase;\ + reg->bigendian =3D edma->big_endian; \ + reg++; \ +} while (0) + +static void fsl_edma_debufs_tcdreg(struct fsl_edma_chan *chan, struct dent= ry *dir) +{ + struct debugfs_regset *regset; + struct debugfs_reg *reg; + struct device *dev; + int be; + + be =3D chan->edma->big_endian; + + dev =3D &chan->pdev->dev; + + regset =3D devm_kzalloc(dev, sizeof(*regset), GFP_KERNEL); + if (!regset) + return; + + regset->dev =3D dev; + regset->base =3D chan->tcd; + + /* sizeof(struct fsl_edma_hw_tcd)/sizeof(u16) is enough for hold all regi= sters */ + reg =3D devm_kcalloc(dev, sizeof(struct fsl_edma_hw_tcd)/sizeof(u16), + sizeof(*reg), GFP_KERNEL); + + if (!reg) + return; + + regset->regs =3D reg; + + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, saddr); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, soff); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, attr); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, nbytes); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, slast); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, daddr); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, doff); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, citer); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, dlast_sga); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, csr); + fsl_edma_debugfs_reg(reg, be, fsl_edma_hw_tcd, biter); + + regset->nregs =3D reg - regset->regs; + + debugfs_create_regset("tcd", 0444, dir, regset); +} + +static void fsl_edma3_debufs_chan(struct fsl_edma_chan *chan, struct dentr= y *entry) +{ + struct debugfs_regset *regset; + struct debugfs_reg *reg; + struct device *dev; + int be; + + be =3D chan->edma->big_endian; + + dev =3D &chan->pdev->dev; + + regset =3D devm_kzalloc(dev, sizeof(*regset), GFP_KERNEL); + if (!regset) + return; + + regset->dev =3D dev; + + reg =3D devm_kcalloc(dev, sizeof(struct fsl_edma3_ch_reg)/sizeof(u32), + sizeof(*reg), GFP_KERNEL); + + if (!reg) + return; + + regset->base =3D chan->tcd; + regset->base -=3D offsetof(struct fsl_edma3_ch_reg, tcd); + + regset->regs =3D reg; + + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_csr); + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_es); + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_int); + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_sbr); + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_pri); + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_mux); + fsl_edma_debugfs_reg(reg, be, fsl_edma3_ch_reg, ch_mattr); + + regset->nregs =3D reg - regset->regs; + debugfs_create_regset("regs", 0444, entry, regset); + + fsl_edma_debufs_tcdreg(chan, entry); +} + +static void fsl_edma3_debugfs_init(struct fsl_edma_engine *edma) +{ + struct fsl_edma_chan *chan; + struct dentry *dir; + int i; + + for (i =3D 0; i < edma->n_chans; i++) { + if (edma->chan_masked & BIT(i)) + continue; + + chan =3D &edma->chans[i]; + dir =3D debugfs_create_dir(chan->chan_name, edma->dma_dev.dbg_dev_root); + + fsl_edma3_debufs_chan(chan, dir); + } + +} + +static void fsl_edma_debugfs_init(struct fsl_edma_engine *edma) +{ + struct debugfs_regset *regset; + struct fsl_edma_chan *chan; + struct debugfs_reg *reg; + struct dentry *dir; + struct device *dev; + int i; + + dev =3D edma->dma_dev.dev; + + regset =3D devm_kzalloc(dev, sizeof(*regset), GFP_KERNEL); + if (!regset) + return; + + regset->dev =3D dev; + + reg =3D devm_kcalloc(dev, sizeof(struct edma_regs)/sizeof(void *), sizeof= (*reg), GFP_KERNEL); + + if (!reg) + return; + + regset->regs =3D reg; + regset->base =3D edma->membase; + + fsl_edma_debugfs_regv1(reg, edma, cr); + fsl_edma_debugfs_regv1(reg, edma, es); + fsl_edma_debugfs_regv1(reg, edma, erqh); + fsl_edma_debugfs_regv1(reg, edma, erql); + fsl_edma_debugfs_regv1(reg, edma, eeih); + fsl_edma_debugfs_regv1(reg, edma, eeil); + fsl_edma_debugfs_regv1(reg, edma, seei); + fsl_edma_debugfs_regv1(reg, edma, ceei); + fsl_edma_debugfs_regv1(reg, edma, serq); + fsl_edma_debugfs_regv1(reg, edma, cerq); + fsl_edma_debugfs_regv1(reg, edma, cint); + fsl_edma_debugfs_regv1(reg, edma, cerr); + fsl_edma_debugfs_regv1(reg, edma, ssrt); + fsl_edma_debugfs_regv1(reg, edma, cdne); + fsl_edma_debugfs_regv1(reg, edma, inth); + fsl_edma_debugfs_regv1(reg, edma, errh); + fsl_edma_debugfs_regv1(reg, edma, errl); + + regset->nregs =3D reg - regset->regs; + + debugfs_create_regset("regs", 0444, edma->dma_dev.dbg_dev_root, regset); + + for (i =3D 0; i < edma->n_chans; i++) { + if (edma->chan_masked & BIT(i)) + continue; + + chan =3D &edma->chans[i]; + dir =3D debugfs_create_dir(chan->chan_name, edma->dma_dev.dbg_dev_root); + + fsl_edma_debufs_tcdreg(chan, dir); + } +} + +void fsl_edma_debugfs_on(struct fsl_edma_engine *edma) +{ + if (!debugfs_initialized()) + return; + + debugfs_create_bool("big_endian", 0444, edma->dma_dev.dbg_dev_root, &edma= ->big_endian); + debugfs_create_x64("chan_mask", 0444, edma->dma_dev.dbg_dev_root, &edma->= chan_masked); + debugfs_create_x32("n_chans", 0444, edma->dma_dev.dbg_dev_root, &edma->n_= chans); + + if (edma->drvdata->flags & FSL_EDMA_DRV_SPLIT_REG) + fsl_edma3_debugfs_init(edma); + else + fsl_edma_debugfs_init(edma); +} + + diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index 63d48d046f04..029a72872821 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -612,6 +612,8 @@ static int fsl_edma_probe(struct platform_device *pdev) if (!(drvdata->flags & FSL_EDMA_DRV_SPLIT_REG)) edma_writel(fsl_edma, EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr); =20 + fsl_edma_debugfs_on(fsl_edma); + return 0; } =20 --=20 2.34.1 From nobody Mon Jan 5 11:18:28 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 744A5E7490C for ; Mon, 2 Oct 2023 18:38:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238800AbjJBSif (ORCPT ); Mon, 2 Oct 2023 14:38:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238747AbjJBSi0 (ORCPT ); Mon, 2 Oct 2023 14:38:26 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2076.outbound.protection.outlook.com [40.107.6.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAC94B0; Mon, 2 Oct 2023 11:38:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OsrCa8/l7MaorwhrQfYdQtPfa/vw1ctoKdcPmDpVNNz0IG9NlQaujk7/kI3q8ZhQ60IFT4INGkSaAqzvyLhjP+W5oxAwkXDRRYoVEWpdANtTzYSK5E2fWLrdhlu1iOYwOuqQFWS5ogHwkuW+t+CvYmM7PNlkTIJxd4d8NZ2QRumSN9JGTpz9UMPGSxHYIrL0Yp/AShOmvratfS+iFa7qkvCryOfr6cjWSV3GL+tU3KHb3PRUKm9ZEK/OGG82ttVS8ZodQsxu5GFsIHDKWV0ZRJGKEVG0yMRumuMXGZcEy8heswjEQYqfy3A9HBBBUrx2njMwwbGxvNE1VXV7gpjpgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=vSwA1bfeEHszTu5G6jeavumnHAM9N1N3W/jyFWLPiiA=; b=b5fmdybK6cJrSSQhNMYPA9VZeevOds5szGX+MZpzzftt33k6LkMW1UXVengoSmRrEeoOHi+ieDFW79T8sj79vpN2v/RQIHcVbuHoe04/chTFOExEiAGCIn16WuZVkSEIJvmB9jbJKh3a0llGD/w1JKHSJn5ZGygVgUizt+f4yUTSi0b2p0iKryHI4Hdaf63M1KoerE/r5kMDQtnJPxQDfUeJUuRgV2C9CVQGsy5XJsL6sr/bHr4gODpIOHPAiG251m4WgK+5T9nKqbAsoVk0ZDxkBUctOcqfUpZLugVpBwCZXXj7N0r3euonPZRvy2QonlxRuWAsRBw7M1ifiZjWJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vSwA1bfeEHszTu5G6jeavumnHAM9N1N3W/jyFWLPiiA=; b=W8XPc/r4FfP3C6YoiATuN8mJ6q8+JZtI3B9gwgzUjEWk/ZsYBHdYDjI4zqMymoYmRfUXvlKmqirFQVZ4ewrmDY1o63WM5ebe1J87W49Zh0wvw39TxNO+KDOR4F7D2NQLQzWq8+2zIEiQEjSpbrxTegDgCMfq+ezuTY7D2mCtJW4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) by DB9PR04MB9283.eurprd04.prod.outlook.com (2603:10a6:10:36d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.24; Mon, 2 Oct 2023 18:38:21 +0000 Received: from AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::1774:e25f:f99:aca2]) by AM6PR04MB4838.eurprd04.prod.outlook.com ([fe80::1774:e25f:f99:aca2%4]) with mapi id 15.20.6813.027; Mon, 2 Oct 2023 18:38:21 +0000 From: Frank Li To: arnd@arndb.de, vkoul@kernel.org Cc: Frank.Li@nxp.com, bhe@redhat.com, dmaengine@vger.kernel.org, gregkh@linuxfoundation.org, imx@lists.linux.dev, linux-kernel@vger.kernel.org, lkp@intel.com, oe-kbuild-all@lists.linux.dev, rafael@kernel.org Subject: [PATCH v5 3/3] dmaengine: fsl-edma: add trace event support Date: Mon, 2 Oct 2023 14:37:50 -0400 Message-Id: <20231002183750.552759-4-Frank.Li@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002183750.552759-1-Frank.Li@nxp.com> References: <20231002183750.552759-1-Frank.Li@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BYAPR07CA0016.namprd07.prod.outlook.com (2603:10b6:a02:bc::29) To AM6PR04MB4838.eurprd04.prod.outlook.com (2603:10a6:20b:4::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB4838:EE_|DB9PR04MB9283:EE_ X-MS-Office365-Filtering-Correlation-Id: 16bd79af-5cb2-4756-e5ac-08dbc376c0ce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: adIWI0coBcfLreARcb83saEjQBmQEReP51SBb/x0QDTPywsHnrG9AHYgPleItcTm85aF68rnPCkzbL3ku0HbbmvdhT359cLGg+gHt0iFEQKxfWI/4CKdZUlB+UOPABGUXJWALSRlFMushgp43iXXGWRaEtNLG/OASArSG44MyYQoDPmXApku/YqefzN2qO2ItNq05awPBY1rhqVY4VLs3pITAJzrokDYJe9n/QWDjhcM7dOCfGFTO2ifF6q5wwVNTmJO6sbwDBEF/avyVQ/kpYortm4K4gjPp39tR1wfga+uWZfpogPnXOH7LTpAnrsBVcMsp5r/cLESVa5AaRwWqM0kOnFT2ntCVJoYiUpCpdznQf9HbG4ssjSftI2MPWqsGJxCk8LwXZ3aBWv3AdYADbuceC6SSNtiPN8sodwzo0KKsg1aITYoBmAJVH1URYtmFOMbpP8wYehBTOCiuSnogtBNATMu4G6L7k7yl8yeIzvlFvqynHut3xfGW0dFrs9n7mow5lfDxRtohzNdkFOCe/zcsS+6R95H1yaOBAHxoFGaGby3+k7H3fwDbmJ1lEcYXrgCYfQ+eDJGBp1ci9gIlKEoMypvPyHeOEwj03lpvNjETGq1DoyaXWvKyEidx5We X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB4838.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(136003)(376002)(396003)(346002)(366004)(230922051799003)(451199024)(1800799009)(186009)(64100799003)(52116002)(2906002)(7416002)(41300700001)(8676002)(4326008)(8936002)(5660300002)(316002)(36756003)(66946007)(66556008)(6506007)(478600001)(6512007)(38100700002)(6666004)(1076003)(86362001)(38350700002)(2616005)(66476007)(83380400001)(26005)(6486002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iCis1cX0cfkU8Girjm+4KVlYhw24fwqb5wHySgl0yEXMIH4ICiGg6v1CQQ4z?= =?us-ascii?Q?DSSDP3donTwWy0pC4oj/dZ5SCYhoNnd1zz0NAyn4U619bLXSTMskTx3aRQKy?= =?us-ascii?Q?kahNpY2/tGlRVNmqHuwGukGriiEkB/w7BrYFBAMD8AbACCtKZoQ0YjRqIVg8?= =?us-ascii?Q?LjPDn9EY4l45lFv6BvoeraILtu9t3HLtfuo5Jef8AIzX4ZqcoJxOdToXClOu?= =?us-ascii?Q?9IHkfHK4ig7Y0zC3x01WKuhwZ7S1O92Bh079rrpobk2XB340eh0NrgWqDatm?= =?us-ascii?Q?jHhNIKOqub/wY1Xmm+d7zhpPWnA/ngfO2H+RRDKYU5HK3C+ptn+r0ZDLbMTj?= =?us-ascii?Q?bWJJSJfsHrZME5fEBjcOSSWtFtRd+oDWhqNd9JniP5jrIijc2eI8c5+01toQ?= =?us-ascii?Q?RnG0NHWZ+LvsfeYGRf037HOfzoFtPg0cOgsNfsX6N9hCCFOkvHRDVvupALOv?= =?us-ascii?Q?m+l1ztFvQ/x0Mi2cEtiR87LOGOmeDANQuMk9rnByXCU8Pi1Ld4oz272BlI/K?= =?us-ascii?Q?1TXce031xGHKCKU2NXXy7DsAh4Hhp20wHT/wtr01QBGpNVFHRyPtRoYVPuFT?= =?us-ascii?Q?7DD1d0pgiSfUGEnjj70HoNej8+b5BIzflv/TAJxAk1PMqpPy19kkeRmgJFdl?= =?us-ascii?Q?5WOayF90bee+ytjM9v6uE3AFG5f1S7v7kCD+BMxgDRERZ16Ct6547hbUjEpQ?= =?us-ascii?Q?eo+EvrIpvhIwkQT0t80Sw6vx32seBLe913/8awTK4huQuzXNiNe4C7PIFleX?= =?us-ascii?Q?vEVXzapmxStiaAJ30sAzFmcUgLk8IyfEf/4Egx5bhuBd81GH9GrtqIyjjOS4?= =?us-ascii?Q?uZxshOpuDUri9S8Wmnx9LSbpw7KwW7671vcfJI2vmMB9BYQ5oB1zXXpPU1QX?= =?us-ascii?Q?Pey+DxCnWMXu/X3rLiswbuWVqT1Hw0kG/toLwLsID0Qyf5NGBFI1z+VLPt+h?= =?us-ascii?Q?q+Z/nz/mpx0R0qDbwLNJBR2V49eS1aL6teJf9E3XZL8lY0lhJII3Q5pCnMq1?= =?us-ascii?Q?DhP/n3ErzMrnXK8LbhmXL8nD5Z1ig/fa85/spOrZi9iJwzqHygztc04pkw16?= =?us-ascii?Q?rAzuibB+VUnfQqR/vgkMDrkNwotK+PM+uFjTaAHfFFI6QutCVw9gU86ixn81?= =?us-ascii?Q?WH02K7vwEjAkizk6vsVKn6KhWHziUaluiTDjhfAUi8BPt8shxUSW1TkVZFx4?= =?us-ascii?Q?12aeo96zNO+6LmN1EuP6Go7t5xk0H5mMzryvnEw1Gp63wZVyXRiVsdRuoRW/?= =?us-ascii?Q?f7KW238BdeZqO26BvTL6tgS2lbjlqE/Y3xr9g14+EwbWI2SX/ua9QN7CjWvK?= =?us-ascii?Q?DFQdF6KW+yNlgrnbL0NJctebhlrtaVa7FX6gpodvJJjceuRDWyPQCZk3QwDj?= =?us-ascii?Q?H9AyhustALgtMS42Sfb3O9TO+mgNFdkCUATctKfr52HZcCRndUHY02RizO+O?= =?us-ascii?Q?ZJT5ibu2PZ9GhPaeADDkA5ueqvzveIQoXRfGKKOtlviDaDuibP+5sSTvQVDs?= =?us-ascii?Q?/YHO+nGhlv6KfoTJ3tGEvQKClp3ozyQoxvyxFRktyapicE6FualBHdxOYh0h?= =?us-ascii?Q?vDsTr0cxi78bUgfr2CNV6ZqoKnA96ehBj/XvNa/j?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16bd79af-5cb2-4756-e5ac-08dbc376c0ce X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB4838.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2023 18:38:21.3085 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ttjfg9u6c5L3X7MU8JP/66Hh2IXUvM56kyRQvQvaXiFZfPUT7Rqp+D65b8H6FjBQQ/OPmVhmG9MYMxm4HhNWXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9283 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Implement trace event support to enhance logging functionality for register access and the transfer control descriptor (TCD) context. This will enable more comprehensive monitoring and analysis of system activities Signed-off-by: Frank Li --- drivers/dma/Makefile | 6 +- drivers/dma/fsl-edma-common.c | 2 + drivers/dma/fsl-edma-common.h | 29 +++++++- drivers/dma/fsl-edma-trace.c | 4 + drivers/dma/fsl-edma-trace.h | 134 ++++++++++++++++++++++++++++++++++ 5 files changed, 169 insertions(+), 6 deletions(-) create mode 100644 drivers/dma/fsl-edma-trace.c create mode 100644 drivers/dma/fsl-edma-trace.h diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index a51c6397bcad..40b2dd554e5d 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile @@ -32,10 +32,12 @@ obj-$(CONFIG_DW_DMAC_CORE) +=3D dw/ obj-$(CONFIG_DW_EDMA) +=3D dw-edma/ obj-$(CONFIG_EP93XX_DMA) +=3D ep93xx_dma.o fsl-edma-debugfs-$(CONFIG_DEBUG_FS) :=3D fsl-edma-debugfs.o +CFLAGS_fsl-edma-trace.o :=3D -I$(src) +fsl-edma-trace-$(CONFIG_TRACING) :=3D fsl-edma-trace.o obj-$(CONFIG_FSL_DMA) +=3D fsldma.o -fsl-edma-objs :=3D fsl-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) +fsl-edma-objs :=3D fsl-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y)= ${fsl-edma-trace-y} obj-$(CONFIG_FSL_EDMA) +=3D fsl-edma.o -mcf-edma-objs :=3D mcf-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) +mcf-edma-objs :=3D mcf-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y)= ${fsl-edma-trace-y} obj-$(CONFIG_MCF_EDMA) +=3D mcf-edma.o obj-$(CONFIG_FSL_QDMA) +=3D fsl-qdma.o obj-$(CONFIG_FSL_RAID) +=3D fsl_raid.o diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c index a0f5741abcc4..0182e2695fdc 100644 --- a/drivers/dma/fsl-edma-common.c +++ b/drivers/dma/fsl-edma-common.c @@ -521,6 +521,8 @@ void fsl_edma_fill_tcd(struct fsl_edma_chan *fsl_chan, csr |=3D EDMA_TCD_CSR_START; =20 tcd->csr =3D cpu_to_le16(csr); + + trace_edma_fill_tcd(fsl_chan->edma, tcd); } =20 static struct fsl_edma_desc *fsl_edma_alloc_desc(struct fsl_edma_chan *fsl= _chan, diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h index 029197440bc3..453c997d0119 100644 --- a/drivers/dma/fsl-edma-common.h +++ b/drivers/dma/fsl-edma-common.h @@ -234,6 +234,9 @@ struct fsl_edma_engine { edma_writel(chan->edma, val, \ (void __iomem *)&(container_of(chan->tcd, struct fsl_edma3_ch_reg, tc= d)->__name)) =20 +/* Need after struct defination */ +#include "fsl-edma-trace.h" + /* * R/W functions for big- or little-endian registers: * The eDMA controller's endian is independent of the CPU core's endian. @@ -242,18 +245,30 @@ struct fsl_edma_engine { */ static inline u32 edma_readl(struct fsl_edma_engine *edma, void __iomem *a= ddr) { + u32 val; + if (edma->big_endian) - return ioread32be(addr); + val =3D ioread32be(addr); else - return ioread32(addr); + val =3D ioread32(addr); + + trace_edma_readl(edma, addr, val); + + return val; } =20 static inline u16 edma_readw(struct fsl_edma_engine *edma, void __iomem *a= ddr) { + u16 val; + if (edma->big_endian) - return ioread16be(addr); + val =3D ioread16be(addr); else - return ioread16(addr); + val =3D ioread16(addr); + + trace_edma_readw(edma, addr, val); + + return val; } =20 static inline void edma_writeb(struct fsl_edma_engine *edma, @@ -264,6 +279,8 @@ static inline void edma_writeb(struct fsl_edma_engine *= edma, iowrite8(val, (void __iomem *)((unsigned long)addr ^ 0x3)); else iowrite8(val, addr); + + trace_edma_writeb(edma, addr, val); } =20 static inline void edma_writew(struct fsl_edma_engine *edma, @@ -274,6 +291,8 @@ static inline void edma_writew(struct fsl_edma_engine *= edma, iowrite16be(val, (void __iomem *)((unsigned long)addr ^ 0x2)); else iowrite16(val, addr); + + trace_edma_writew(edma, addr, val); } =20 static inline void edma_writel(struct fsl_edma_engine *edma, @@ -283,6 +302,8 @@ static inline void edma_writel(struct fsl_edma_engine *= edma, iowrite32be(val, addr); else iowrite32(val, addr); + + trace_edma_writel(edma, addr, val); } =20 static inline struct fsl_edma_chan *to_fsl_edma_chan(struct dma_chan *chan) diff --git a/drivers/dma/fsl-edma-trace.c b/drivers/dma/fsl-edma-trace.c new file mode 100644 index 000000000000..28300ad80bb7 --- /dev/null +++ b/drivers/dma/fsl-edma-trace.c @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 + +#define CREATE_TRACE_POINTS +#include "fsl-edma-common.h" diff --git a/drivers/dma/fsl-edma-trace.h b/drivers/dma/fsl-edma-trace.h new file mode 100644 index 000000000000..9dd08a42ad54 --- /dev/null +++ b/drivers/dma/fsl-edma-trace.h @@ -0,0 +1,134 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright 2023 NXP. + */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM fsl_edma + +#if !defined(__LINUX_FSL_EDMA_TRACE) || defined(TRACE_HEADER_MULTI_READ) +#define __LINUX_FSL_EDMA_TRACE + +#include +#include + +DECLARE_EVENT_CLASS(edma_log_io, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value), + TP_STRUCT__entry( + __field(struct fsl_edma_engine *, edma) + __field(void __iomem *, addr) + __field(u32, value) + ), + TP_fast_assign( + __entry->edma =3D edma; + __entry->addr =3D addr; + __entry->value =3D value; + ), + TP_printk("offset %08x: value %08x", + (u32)(__entry->addr - __entry->edma->membase), __entry->value) +); + +DEFINE_EVENT(edma_log_io, edma_readl, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value) +); + +DEFINE_EVENT(edma_log_io, edma_writel, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value) +); + +DEFINE_EVENT(edma_log_io, edma_readw, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value) +); + +DEFINE_EVENT(edma_log_io, edma_writew, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value) +); + +DEFINE_EVENT(edma_log_io, edma_readb, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value) +); + +DEFINE_EVENT(edma_log_io, edma_writeb, + TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), + TP_ARGS(edma, addr, value) +); + +DECLARE_EVENT_CLASS(edma_log_tcd, + TP_PROTO(struct fsl_edma_engine *edma, struct fsl_edma_hw_tcd *tcd), + TP_ARGS(edma, tcd), + TP_STRUCT__entry( + __field(struct fsl_edma_engine *, edma) + __field(u32, saddr) + __field(u16, soff) + __field(u16, attr) + __field(u32, nbytes) + __field(u32, slast) + __field(u32, daddr) + __field(u16, doff) + __field(u16, citer) + __field(u32, dlast_sga) + __field(u16, csr) + __field(u16, biter) + + ), + TP_fast_assign( + __entry->edma =3D edma; + __entry->saddr =3D le32_to_cpu(tcd->saddr), + __entry->soff =3D le16_to_cpu(tcd->soff), + __entry->attr =3D le16_to_cpu(tcd->attr), + __entry->nbytes =3D le32_to_cpu(tcd->nbytes), + __entry->slast =3D le32_to_cpu(tcd->slast), + __entry->daddr =3D le32_to_cpu(tcd->daddr), + __entry->doff =3D le16_to_cpu(tcd->doff), + __entry->citer =3D le16_to_cpu(tcd->citer), + __entry->dlast_sga =3D le32_to_cpu(tcd->dlast_sga), + __entry->csr =3D le16_to_cpu(tcd->csr), + __entry->biter =3D le16_to_cpu(tcd->biter); + ), + TP_printk("\n=3D=3D=3D=3D TCD =3D=3D=3D=3D=3D\n" + " saddr: 0x%08x\n" + " soff: 0x%04x\n" + " attr: 0x%04x\n" + " nbytes: 0x%08x\n" + " slast: 0x%08x\n" + " daddr: 0x%08x\n" + " doff: 0x%04x\n" + " citer: 0x%04x\n" + " dlast: 0x%08x\n" + " csr: 0x%04x\n" + " biter: 0x%04x\n", + __entry->saddr, + __entry->soff, + __entry->attr, + __entry->nbytes, + __entry->slast, + __entry->daddr, + __entry->doff, + __entry->citer, + __entry->dlast_sga, + __entry->csr, + __entry->biter) +); + +DEFINE_EVENT(edma_log_tcd, edma_fill_tcd, + TP_PROTO(struct fsl_edma_engine *edma, struct fsl_edma_hw_tcd *tcd), + TP_ARGS(edma, tcd) +); + +#endif + +/* this part must be outside header guard */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH . + +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE fsl-edma-trace + +#include --=20 2.34.1