From patchwork Mon Oct 2 18:37:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 147487 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2a8e:b0:403:3b70:6f57 with SMTP id in14csp1712172vqb; Mon, 2 Oct 2023 14:57:41 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGWwGs89FJh0NUXCQQku1blgGGGDC5V8Jbnz6abp73m+8w7wE8ZNfK+E65B8ZhEq1zrn7TP X-Received: by 2002:a17:902:e803:b0:1c5:cd01:d846 with SMTP id u3-20020a170902e80300b001c5cd01d846mr14837800plg.3.1696283861489; Mon, 02 Oct 2023 14:57:41 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1696283861; cv=pass; d=google.com; s=arc-20160816; b=lLhl9ekGOwR0U1L3uZw4Nej5ZQErYhig+AgfcIs4IhugQ2jZYTTej8Fkyys08K8Aur 41aTnsWhjXuXGnHrRNWTTvjEkTaECRSTdqsua8hYMQXfkl0f1G3wmf2vOWVtLmOuFlBe bbQzEVrLMaSBmRDUf2hl33q4ELyX0+FCFjRBLtnrdY/tGuN0pIs0BFGSTRFB60RVanj1 LHGrY2FbSZTH4lJwh65y3vVUXLG7IH7tFZG3BL9j6Wg/SQlon+Lalq8ld1mN1LhDKX74 JKcCAO0Nc3b1LkiWtW6lXwezJlQX8wmC/WkkL+oX5INEN9yNP2q4OxsCVHJA4kmn882G 1ulw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vE/E2an+MC2WTwMy3CtHu9jt6k/DAy24enLTD5MbX6g=; fh=bG/2O/1M+OyclUY+peu5KfRAtH/+EQ5Fv+4+X5okWZ8=; b=ouvLJVF36F2Amtgjo1VsSgwniXR0lB/XNij9U5ZYUM5I/fYoiO/2TOEbn9Xaz+gpGR o1YZ8p+chcEVaHvo2W2Qyt4USFW+ai9clq1MpOtRCy7YvrqmJjK2mAr67rqA0WnOjXdD dLTqDPHMq6gduTE+8dAKvqp7FP53S0rlVG/J70r1Qole375+oR0ycsArGxERVKyptytJ fo+zgFZ5l+Gc3iT5AJq7rhRMlUgBs+U0yIvcrI4qZaRE1E1hw1J3/XUETmKRk3dlD1zn KwubGFibQH432MQyW2dYna+uhA3kfCiJINGtNzrQNfWzxo9Imd/cgNgJnHBizzC+sUJr t+WQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=q6JdHP+F; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id a15-20020a170902710f00b001c5f5153e41si22450727pll.535.2023.10.02.14.57.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Oct 2023 14:57:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=q6JdHP+F; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 4F29C80EA8D7; Mon, 2 Oct 2023 11:38:37 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238750AbjJBSiZ (ORCPT + 18 others); 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> 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: V0bFeTwWm1pleQHFAj8NANR6Rsv9MEOjDLKkfDubW8we+P36do0OBZItJayEKbR0QmjHuSmF4cC5W9C9suP9+rliMZRmfq5BalfD5iUGU5x4lpQbzxHd676EnRd3m79d06jRZdKh1BNMhDNs20JWUf7RPCYwEdn2efd5Rs+3trlyuNs7KIln3EtiNjB4hhog2JkKgKux7LLrU6CBvZ0EJmNrYzNgCrsaF+b/kwk2GMuBcCGa6ryuQV+0mMYBK6kpMGLV05kyYM3yeBB/lI6diGyl/gwUJhmRWqERh9X5Hrn1mbCniMXizrgvC97yo1pMt2Ri8m0NKtKE9OW4gSIY1WfC9pMa6xxL/feWFW5LWeutKesm9ubU9LJlZ3aDYXqqNhMpsraZoT2BSrjOTbY8/ipJmRxcDleIig5AhfBJdyotdOsw+DVmxYYGNx9s8CIMoJ27XtROe4YxF3nzfpKqya1N0JQ40up8znIo5WbzRlx1QskTiq1yB7HThjiOIl+2UHNVZ4uSdUQtk+AbU+FLh5QYMle253o/JTtihpJMWbCW0r+dOawhJ2kFR71isNlDnNgGLA/wc6ezCOMkIewwBtGvG2XAIxQlZzkYPvP6HP7oFeMrCBH7YhSHU4AbRsvYDxqMAbxuKX7Lo/2yghwvwU8vCAaqj5UPW5oPqgqunHbaC5yPe+89xqSnLmbQW3eAB4h2cz4Ea+jsyR0MNOsiJqLqPMQeEZId13K7we7I8sLLUhThEH40wcA/hhMzQofFeiunCkF2R2yNzYBQO9kVGQZtf0I/MRdlqIXkLcRd6FJ5GGZuAszNzQT937efEU7L/81nviC34oruKL5ObOhxa6JjjfdCYEWiqt/UWCTgxgaojxrYrkJerrfFR0TAlJmuLvLnRfDA51pGIYSotlmugdbMQ2IGRV+55xQBUwCGGLuu8jlxSa1HP96yLn6GJABRyCJezgKDC6w5Q6dhKJbKEHWwK+JGIFee/FeFetnPiDhuVRCd+WNi/pB0LFuM1N7Mk5TQ1klc5Cs+ELUfVQy7Hf4rp1o+Y+3QB4uZLm4QXUH/E+cXB/zrJlqr5FcD/isIXbsjMFFXuLR2UOa4JRlEuMAc0oi81cZ3QphdLrDRUay4CrX9QfC8RGr/4iOWyYxd7XHLa8PjY10cumLNlxJJwJKEC5EbKxPArCggP//+jOosw7St9PNOqp4D2VHa9W6XobGbBJv+vK5x125jIUzHvAi3zjHFb/Q6UaeA+94JeuN3X0fQ92B2weMDoiXrbVteEXd18+eTa3pzz5dCmSuudEl656eDCKLNXTvb6qn9BdZcoRyyVX4eLcdBk4Q23L4hNXFuJwxtHfwVsdvO444JBY0jpzcCAsHPfsYbFgqLSZOJDaeyb55mzrNtENHyKsVZRnmMJVpSQIuJjPOoUAO1TwBFtpgyTcn7YG6V4oY0zFKLI3IsEKMYgkIPY3UnIT6+Mi3qKdQv8epnWQY9t2OduRR4WMQBIr24n2Xk11aNezKKbdPAJ8nBUXGTdGPN5QSV9ByHNclKZRmWT0Xu08KA/Ktl5GkcgzcSnFdkZjupe7b1mAUeW09VCqTUJMGug3VR 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 X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 02 Oct 2023 11:38:37 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778676755206503957 X-GMAIL-MSGID: 1778682546246022459 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 /* - * 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-opened - * sequential file or create a debugfs file that only prints a regset32. + * sequential file or create a debugfs file that only prints a regset. */ /** - * 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; for (i = 0; i < nregs; i++, regs++) { if (prefix) seq_printf(s, "%s", prefix); - seq_printf(s, "%s = 0x%08x\n", regs->name, - readl(base + regs->offset)); + + b = regs->bigendian; + reg = base + regs->offset; + + switch (regs->size) { + case sizeof(u8): + seq_printf(s, "%s = 0x%02x\n", regs->name, ioread8(reg)); + break; + case sizeof(u16): + seq_printf(s, "%s = 0x%04x\n", regs->name, + b ? ioread16be(reg) : ioread16(reg)); + break; + default: + seq_printf(s, "%s = 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); -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 = s->private; + struct debugfs_regset *regset = s->private; if (regset->dev) pm_runtime_get_sync(regset->dev); - debugfs_print_regs32(s, regset->regs, regset->nregs, regset->base, ""); + debugfs_print_regs(s, regset->regs, regset->nregs, regset->base, ""); 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; } -DEFINE_SHOW_ATTRIBUTE(debugfs_regset32); +DEFINE_SHOW_ATTRIBUTE(debugfs_regset); /** - * debugfs_create_regset32 - create a debugfs file that returns register values + * debugfs_create_regset - create a debugfs file that returns register values * @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 pointer + * @regset: a pointer to a struct debugfs_regset, which contains a pointer * to an array of register definitions, the array size and the base * 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); #endif /* CONFIG_HAS_IOMEM */ 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; }; -struct debugfs_reg32 { +struct debugfs_reg { char *name; + int size; + int bigendian; unsigned long offset; }; -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 */ }; +#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); -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); -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 *regs, int nregs, void __iomem *base, char *prefix); +#define debugfs_print_regs32 debugfs_print_regs void debugfs_create_u32_array(const char *name, umode_t mode, struct dentry *parent, From patchwork Mon Oct 2 18:37:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 147451 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2a8e:b0:403:3b70:6f57 with SMTP id in14csp1663624vqb; Mon, 2 Oct 2023 13:07:36 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFMjUWuLp0lUlP7RkH2y/45DGV3Xy/zBx9rn7v2LztNIriCUSlps61YdRMjvgQEI5kO2Aez X-Received: by 2002:a17:90a:ce8c:b0:26d:43f9:11dd with SMTP id g12-20020a17090ace8c00b0026d43f911ddmr9856244pju.0.1696277255699; Mon, 02 Oct 2023 13:07:35 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1696277255; cv=pass; d=google.com; s=arc-20160816; b=kS4vu4Bdce2lxy7FueWeBpuI+V0GEUlwYDVqHcRqeGjZsmSxaXrUlV3QGNkc41SBI2 MxMqigdpfdQiARD4OdP6y2qNe2mpafpSN32ocy4NpikRAwLPmxiL+PdZ0b0PcUgesA0V yuQ2FMueSX/hpRspvPC5HcvaodcBqssZpsqpdiD0vSJnMtUWt9kz9LfBBf6z1LMKmgiN 0S+W/Ib/Wh5YAnQ12dyv4xjUYNqfzZ17BhqRM+kMN8n0DhDunEoi+miM/zoUTNQhEolb lrHh23AsNpQXDHlM/X7rQ3UNshTbRtoh8OlHsgQlRbJAsiSRG+R44rikQ4lPtDYTwE2Y Cwlg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=KrrRSsmz8JDYKRnhitxLdhGClwA1D4DSztdMBen7IAg=; fh=bG/2O/1M+OyclUY+peu5KfRAtH/+EQ5Fv+4+X5okWZ8=; b=r6iShb9ALkdcSc+bRDKhSw4eVIcZ4txycUGGOCVA+8guWKu0NCeif5qn1TakiHQLtw lyhKUIMLWvr68QQCIITD5cl43H67YbgCJoZ14IoNKASkL/JAv1xLdy6SaQAOzdRo+eD5 6bOe1ICzzEkL8s64nGB0iWbuknvIs+14PJmPKTYf4oMsVRxt1/749WigZV/KwfUF6gZz WyyVHLabypOPFHaQKKM6/FZhVwA9PiKLDjLPHWQY2VPn18EvjgW8NH4J4vghc5xFrbXo wuB/05siNzK9pQm+4kH5RsdoTsLm3Nyg1yll0RKUzFj+dPYyiKo3QenW4G+Jip2Dx77h Y2zA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=lsgPq3WM; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id p10-20020a17090a4f0a00b00263c4af31f2si8263073pjh.157.2023.10.02.13.07.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Oct 2023 13:07:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=lsgPq3WM; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id EBFF4802689A; Mon, 2 Oct 2023 11:39:25 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238807AbjJBSi1 (ORCPT + 18 others); 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> 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: dFBmKFYwGuoGfzxeSu9WkFE6BSLF75u5SP1VBbojbsey6oczbwTE7f+W/i67lPQ2cv/sIclIxCH3ZuXugC7N+ELDHzW+DXGvdq6YNm0Zae1Ks50ePolIoHBrkr5i1EJGNWkR56aXOibNseoJ6dmYHAHHkkhb6Vo6np0nQPzLwg8+Ys0CG8RXz4avWz4MgJ2KEJLtPOApaKCLG4VPQv3vWPlgAd/NpLxz21K49J17rOQ2Vxej91desngHWb5NZ8//1Zppx5TvJDIfMzx8RA1PLYuGnGGKyoIljmZPSl09ixUFmM8Q3jHkUmvEa13YhZVRcD/SIk9LHkxPCN8z51p/OAxccrScae7DLtStjFSzYspTMr1Ho9jpviaLDpo6YXAg7tJsj1dKa4VZmPwe4PpA6ZbmR+rlxBZHk/4JZt+xdAPjfD1oMiw6Yjf0WS90vTAtitY7W+2awrGbQUYjvv1P7u8HBqZV+pwbhurosIcFJDm4YBUGn1KAGMv+o5PKEd+BAqFXZNWizEeaNcDPCYxyzi/sM2gp8sg1euUU3U9jVkbxWT33CSE0D2J6HwdpuXjQAVY3oftVX0AMD4mK5dnkve2aIpCE49IoTHk1NgqOpUVEX9aoKhgyIczm1y7EOgovMqEloUCWE6ZLZabk/JKGzhQjzLwBNUtb8Xj9knUp2rzqeGKa1zOIv4zO05RKzCTOwOWGx/ulrVZn+O++e6gpZeQpvcF779LlrzalY1ODJiPo8RwMKOz9fMFrRGtYvdSKkyZ7EwVaauUo0XLwJwagnUohx6Jv6TRkYbesqZFn6Z04d7SWhqk1RJ1T5ccePPOgVhaTnusDpy91ZnOcmcyUwYQvg9z7zM5qGpl8tG4kSFZCfKmQ3y3AQxG+egWVF5Igv+ZYqL0abmLC5+23T8UuKR3khKwJ0vQvP1lZULKHMIP1I+12gQiF0nFi+fsGRB+yzuJqnVIVHAuyxrbCrJFlf2ASX69PzM5+u29xoCZxnn5aU7MnR7ybCYfNIGUZZeO8X4o26zwxhHnbGHkzj9UFvvMGzgPLsx/QTQr5s0GuWog6Xk1njX3FkPkYU2EzOlZW2eCDZYYGYAn86j/TtV85X508K1ibpz9/IUjri6iTySJRoUZzrniuH8uxECUW2nsMJO+QQDBg//vb2WGcpcQD21P/xmfeIQC2A5ssbELOnxDGoBLD9ZPBDB4J3NOLBDwmL0xUpH8MLsIE/47Kcwf0qFsmGTfMUC0eF2dTlbsjYReEpXbA+TimhHyDRViMjGx/hXMsWmepCG6k1hUPkWf1cF8U94IfDxEpYRjNco3Krf6efxq4wCJvOxch6SE+ja4t53u8H+pr6JHAzDnwvQjGRPUZOYKOzF7kWL3th68R0TPWdQ55q5Sjh4kzti8CzzS7HFNVbDzsWGQMLHl3r7462Ilf7QPgqdw1Hzx0AK6TH9yc9y8SS42EicOJAOtKoeYrlihHp2CWLnpomNfu4Jq4Oemg+qYC0TRjQ3tQVvGv0qrDZ8LrlvBYlkBpYupUA8AixTTqOQD/KjOdTIUc9TmlLPHJuHSysxWYyV0IqFRXo+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 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 02 Oct 2023 11:39:26 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778675619440131769 X-GMAIL-MSGID: 1778675619440131769 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) += dw-axi-dmac/ obj-$(CONFIG_DW_DMAC_CORE) += dw/ obj-$(CONFIG_DW_EDMA) += dw-edma/ obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o +fsl-edma-debugfs-$(CONFIG_DEBUG_FS) := fsl-edma-debugfs.o obj-$(CONFIG_FSL_DMA) += fsldma.o -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o +fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) obj-$(CONFIG_FSL_EDMA) += fsl-edma.o -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o +mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) obj-$(CONFIG_MCF_EDMA) += mcf-edma.o obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o obj-$(CONFIG_FSL_RAID) += 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 *chan); void fsl_edma_cleanup_vchan(struct dma_device *dmadev); void fsl_edma_setup_regs(struct fsl_edma_engine *edma); +#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 = __stringify(__name); \ + reg->offset = offsetof(struct _s, __name); \ + reg->size = sizeof(((struct _s *)0)->__name); \ + reg->bigendian = b; \ + reg++; \ +} while (0) + +#define fsl_edma_debugfs_regv1(reg, edma, __name) \ +do { reg->name = __stringify(__name); \ + reg->offset = edma->regs.__name - edma->membase;\ + reg->bigendian = edma->big_endian; \ + reg++; \ +} while (0) + +static void fsl_edma_debufs_tcdreg(struct fsl_edma_chan *chan, struct dentry *dir) +{ + struct debugfs_regset *regset; + struct debugfs_reg *reg; + struct device *dev; + int be; + + be = chan->edma->big_endian; + + dev = &chan->pdev->dev; + + regset = devm_kzalloc(dev, sizeof(*regset), GFP_KERNEL); + if (!regset) + return; + + regset->dev = dev; + regset->base = chan->tcd; + + /* sizeof(struct fsl_edma_hw_tcd)/sizeof(u16) is enough for hold all registers */ + reg = devm_kcalloc(dev, sizeof(struct fsl_edma_hw_tcd)/sizeof(u16), + sizeof(*reg), GFP_KERNEL); + + if (!reg) + return; + + regset->regs = 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 = reg - regset->regs; + + debugfs_create_regset("tcd", 0444, dir, regset); +} + +static void fsl_edma3_debufs_chan(struct fsl_edma_chan *chan, struct dentry *entry) +{ + struct debugfs_regset *regset; + struct debugfs_reg *reg; + struct device *dev; + int be; + + be = chan->edma->big_endian; + + dev = &chan->pdev->dev; + + regset = devm_kzalloc(dev, sizeof(*regset), GFP_KERNEL); + if (!regset) + return; + + regset->dev = dev; + + reg = devm_kcalloc(dev, sizeof(struct fsl_edma3_ch_reg)/sizeof(u32), + sizeof(*reg), GFP_KERNEL); + + if (!reg) + return; + + regset->base = chan->tcd; + regset->base -= offsetof(struct fsl_edma3_ch_reg, tcd); + + regset->regs = 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 = 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 = 0; i < edma->n_chans; i++) { + if (edma->chan_masked & BIT(i)) + continue; + + chan = &edma->chans[i]; + dir = 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 = edma->dma_dev.dev; + + regset = devm_kzalloc(dev, sizeof(*regset), GFP_KERNEL); + if (!regset) + return; + + regset->dev = dev; + + reg = devm_kcalloc(dev, sizeof(struct edma_regs)/sizeof(void *), sizeof(*reg), GFP_KERNEL); + + if (!reg) + return; + + regset->regs = reg; + regset->base = 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 = reg - regset->regs; + + debugfs_create_regset("regs", 0444, edma->dma_dev.dbg_dev_root, regset); + + for (i = 0; i < edma->n_chans; i++) { + if (edma->chan_masked & BIT(i)) + continue; + + chan = &edma->chans[i]; + dir = 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); + fsl_edma_debugfs_on(fsl_edma); + return 0; } From patchwork Mon Oct 2 18:37:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 147486 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2a8e:b0:403:3b70:6f57 with SMTP id in14csp1712169vqb; Mon, 2 Oct 2023 14:57:41 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFj4WTwM6YaIV/NKshgRYfr0DZfwpjv3WFEll4dfwv4z9rGlY8yk7JcQbkk/DG/A68C0pxs X-Received: by 2002:a05:6808:1818:b0:3ae:5e6a:5693 with SMTP id bh24-20020a056808181800b003ae5e6a5693mr15296471oib.0.1696283861413; Mon, 02 Oct 2023 14:57:41 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1696283861; cv=pass; d=google.com; s=arc-20160816; b=Z/TpGml0DKxxdnIXCg2aX4Xs/JnaoLfCGLM+dgLTAN/eS/2BBOHPsdWwK4usP/OjgZ k9zYlp2HN+L7/Y4L0TSwEDpJ5ugky/8HqXGayTy4OjgoOrKh7rwLoM/FvL/ZICahSAd6 caextLZppuPlnYWI1BI8VBgbhUEeURHh3Ocar3TGf7KB4OO3SuAtuobttzc3QTI48nbz YUxjVQ1brrKDlCDi0QQEId5xk0EPOPxC/vZWcsQUTU8dLr3ddfYs94ifPP192xjFWq3v SxPJdsxUX4AU8C3hHlE/cz9qy/1B6wX111Tj6F/ggMsUjUQA0ClBGFGB3hUur3FRmWUp M1Pw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vSwA1bfeEHszTu5G6jeavumnHAM9N1N3W/jyFWLPiiA=; fh=bG/2O/1M+OyclUY+peu5KfRAtH/+EQ5Fv+4+X5okWZ8=; b=LHB3Hfi/Z06639U7T7oXNUXhQz2iMMOkvSrLzouXXb6HrXeiwt/JUfO/xSs8QOLMNk BUuVsS5aypgzzNF8qOd95fSOZiwZ1IzZE4zWoKeOcTLFBSOLboWxjBrdbnlS0A8nNTYj n6WQjj8nyf9QNp3eY6T05Qc+MY6xgDfXLdLP64mTr/JY0FaaGbNGUQPuQA1leyfM+yEf wBMtHbY6B8es6bFoiXwzRnVv4luzpe4Yo4MV5+NI4VGBrUA1Y7eIytqBUYm+GIZ1lhdg L7FtA8uVKAdm/mhgqhP6otV/cJ1yGw3dEih+OvX7Cr6SXWxQxRrTeDlF5snEJrrA1NaG btcA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="W8XPc/r4"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id w1-20020a17090abc0100b00263eb5054fdsi8460998pjr.32.2023.10.02.14.57.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Oct 2023 14:57:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b="W8XPc/r4"; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 44C8A810652F; Mon, 2 Oct 2023 11:38:48 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238805AbjJBSie (ORCPT + 18 others); Mon, 2 Oct 2023 14:38:34 -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> 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: iCis1cX0cfkU8Girjm+4KVlYhw24fwqb5wHySgl0yEXMIH4ICiGg6v1CQQ4zDSSDP3donTwWy0pC4oj/dZ5SCYhoNnd1zz0NAyn4U619bLXSTMskTx3aRQKykahNpY2/tGlRVNmqHuwGukGriiEkB/w7BrYFBAMD8AbACCtKZoQ0YjRqIVg8LjPDn9EY4l45lFv6BvoeraILtu9t3HLtfuo5Jef8AIzX4ZqcoJxOdToXClOu9IHkfHK4ig7Y0zC3x01WKuhwZ7S1O92Bh079rrpobk2XB340eh0NrgWqDatmjHhNIKOqub/wY1Xmm+d7zhpPWnA/ngfO2H+RRDKYU5HK3C+ptn+r0ZDLbMTjbWJJSJfsHrZME5fEBjcOSSWtFtRd+oDWhqNd9JniP5jrIijc2eI8c5+01toQRnG0NHWZ+LvsfeYGRf037HOfzoFtPg0cOgsNfsX6N9hCCFOkvHRDVvupALOvm+l1ztFvQ/x0Mi2cEtiR87LOGOmeDANQuMk9rnByXCU8Pi1Ld4oz272BlI/K1TXce031xGHKCKU2NXXy7DsAh4Hhp20wHT/wtr01QBGpNVFHRyPtRoYVPuFT7DD1d0pgiSfUGEnjj70HoNej8+b5BIzflv/TAJxAk1PMqpPy19kkeRmgJFdl5WOayF90bee+ytjM9v6uE3AFG5f1S7v7kCD+BMxgDRERZ16Ct6547hbUjEpQeo+EvrIpvhIwkQT0t80Sw6vx32seBLe913/8awTK4huQuzXNiNe4C7PIFleXvEVXzapmxStiaAJ30sAzFmcUgLk8IyfEf/4Egx5bhuBd81GH9GrtqIyjjOS4uZxshOpuDUri9S8Wmnx9LSbpw7KwW7671vcfJI2vmMB9BYQ5oB1zXXpPU1QXPey+DxCnWMXu/X3rLiswbuWVqT1Hw0kG/toLwLsID0Qyf5NGBFI1z+VLPt+hq+Z/nz/mpx0R0qDbwLNJBR2V49eS1aL6teJf9E3XZL8lY0lhJII3Q5pCnMq1DhP/n3ErzMrnXK8LbhmXL8nD5Z1ig/fa85/spOrZi9iJwzqHygztc04pkw16rAzuibB+VUnfQqR/vgkMDrkNwotK+PM+uFjTaAHfFFI6QutCVw9gU86ixn81WH02K7vwEjAkizk6vsVKn6KhWHziUaluiTDjhfAUi8BPt8shxUSW1TkVZFx412aeo96zNO+6LmN1EuP6Go7t5xk0H5mMzryvnEw1Gp63wZVyXRiVsdRuoRW/f7KW238BdeZqO26BvTL6tgS2lbjlqE/Y3xr9g14+EwbWI2SX/ua9QN7CjWvKDFQdF6KW+yNlgrnbL0NJctebhlrtaVa7FX6gpodvJJjceuRDWyPQCZk3QwDjH9AyhustALgtMS42Sfb3O9TO+mgNFdkCUATctKfr52HZcCRndUHY02RizO+OZJT5ibu2PZ9GhPaeADDkA5ueqvzveIQoXRfGKKOtlviDaDuibP+5sSTvQVDs/YHO+nGhlv6KfoTJ3tGEvQKClp3ozyQoxvyxFRktyapicE6FualBHdxOYh0hvDsTr0cxi78bUgfr2CNV6ZqoKnA96ehBj/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 X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 02 Oct 2023 11:38:48 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778682546296142755 X-GMAIL-MSGID: 1778682546296142755 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) += dw/ obj-$(CONFIG_DW_EDMA) += dw-edma/ obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o fsl-edma-debugfs-$(CONFIG_DEBUG_FS) := fsl-edma-debugfs.o +CFLAGS_fsl-edma-trace.o := -I$(src) +fsl-edma-trace-$(CONFIG_TRACING) := fsl-edma-trace.o obj-$(CONFIG_FSL_DMA) += fsldma.o -fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) +fsl-edma-objs := fsl-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) ${fsl-edma-trace-y} obj-$(CONFIG_FSL_EDMA) += fsl-edma.o -mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) +mcf-edma-objs := mcf-edma-main.o fsl-edma-common.o $(fsl-edma-debugfs-y) ${fsl-edma-trace-y} obj-$(CONFIG_MCF_EDMA) += mcf-edma.o obj-$(CONFIG_FSL_QDMA) += fsl-qdma.o obj-$(CONFIG_FSL_RAID) += 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 |= EDMA_TCD_CSR_START; tcd->csr = cpu_to_le16(csr); + + trace_edma_fill_tcd(fsl_chan->edma, tcd); } 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, tcd)->__name)) +/* 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 *addr) { + u32 val; + if (edma->big_endian) - return ioread32be(addr); + val = ioread32be(addr); else - return ioread32(addr); + val = ioread32(addr); + + trace_edma_readl(edma, addr, val); + + return val; } static inline u16 edma_readw(struct fsl_edma_engine *edma, void __iomem *addr) { + u16 val; + if (edma->big_endian) - return ioread16be(addr); + val = ioread16be(addr); else - return ioread16(addr); + val = ioread16(addr); + + trace_edma_readw(edma, addr, val); + + return val; } 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); } 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); } 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); } 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 = edma; + __entry->addr = addr; + __entry->value = 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 = edma; + __entry->saddr = le32_to_cpu(tcd->saddr), + __entry->soff = le16_to_cpu(tcd->soff), + __entry->attr = le16_to_cpu(tcd->attr), + __entry->nbytes = le32_to_cpu(tcd->nbytes), + __entry->slast = le32_to_cpu(tcd->slast), + __entry->daddr = le32_to_cpu(tcd->daddr), + __entry->doff = le16_to_cpu(tcd->doff), + __entry->citer = le16_to_cpu(tcd->citer), + __entry->dlast_sga = le32_to_cpu(tcd->dlast_sga), + __entry->csr = le16_to_cpu(tcd->csr), + __entry->biter = le16_to_cpu(tcd->biter); + ), + TP_printk("\n==== TCD =====\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