* [PATCH v2 0/2] dmaengine: fsl_edma: add trace and debugfs support @ 2023-09-19 15:14 Frank Li 2023-09-19 15:14 ` [PATCH v2 1/2] dmaengine: fsl-emda: add " Frank Li 2023-09-19 15:14 ` [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support Frank Li 0 siblings, 2 replies; 7+ messages in thread From: Frank Li @ 2023-09-19 15:14 UTC (permalink / raw) To: vkoul, linux-kernel, dmaengine, imx Change from v1 to v2 Fixed tcd trace issue, data need be saved firstly. === Trace === echo 1 >/sys/kernel/debug/tracing/tracing_on echo 1 >/sys/kernel/debug/tracing/events/fsl_edma/enable Run any dma test ... cat /sys/kernel/debug/tracing/trace uart_testapp_11-448 [000] d..1. 69.185019: edma_fill_tcd: ==== TCD ===== saddr: 0x831ee020 soff: 0x8000 attr: 0xffff nbytes: 0xfba40000 slast: 0x00000000 daddr: 0x8aaa4800 doff: 0x0001 citer: 0x0800 dlast: 0xfba40020 csr: 0x0052 biter: 0x0800 uart_testapp_11-448 [000] d..2. 69.185022: edma_writew: offset 0001803c: value 00000000 uart_testapp_11-448 [000] d..2. 69.185023: edma_writel: offset 00018020: value 4259001c uart_testapp_11-448 [000] d..2. 69.185024: edma_writel: offset 00018030: value 8aaa4000 === DebugFS === cat /sys/kernel/debug/dmaengine/42000000.dma-controller/42000000.dma-controller-CH00/ch_sbr 0x00208003 Frank Li (2): dmaengine: fsl-emda: add debugfs support dmaengine: fsl-edma: add trace event support drivers/dma/Makefile | 7 +- drivers/dma/fsl-edma-common.c | 2 + drivers/dma/fsl-edma-common.h | 37 ++++++++- drivers/dma/fsl-edma-debugfs.c | 116 ++++++++++++++++++++++++++++ drivers/dma/fsl-edma-main.c | 2 + drivers/dma/fsl-edma-trace.c | 4 + drivers/dma/fsl-edma-trace.h | 134 +++++++++++++++++++++++++++++++++ 7 files changed, 296 insertions(+), 6 deletions(-) create mode 100644 drivers/dma/fsl-edma-debugfs.c create mode 100644 drivers/dma/fsl-edma-trace.c create mode 100644 drivers/dma/fsl-edma-trace.h -- 2.34.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] dmaengine: fsl-emda: add debugfs support 2023-09-19 15:14 [PATCH v2 0/2] dmaengine: fsl_edma: add trace and debugfs support Frank Li @ 2023-09-19 15:14 ` Frank Li 2023-09-19 23:51 ` kernel test robot 2023-09-20 21:45 ` kernel test robot 2023-09-19 15:14 ` [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support Frank Li 1 sibling, 2 replies; 7+ messages in thread From: Frank Li @ 2023-09-19 15:14 UTC (permalink / raw) To: vkoul, linux-kernel, dmaengine, imx Add debugfs support to fsl-edma to enable dumping of register states. Signed-off-by: Frank Li <Frank.Li@nxp.com> --- drivers/dma/Makefile | 5 +- drivers/dma/fsl-edma-common.h | 8 +++ drivers/dma/fsl-edma-debugfs.c | 116 +++++++++++++++++++++++++++++++++ drivers/dma/fsl-edma-main.c | 2 + 4 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 drivers/dma/fsl-edma-debugfs.c diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index 83553a97a010e..a51c6397bcad0 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 3cc0cc8fc2d05..ecaba563d4897 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 dw_edma *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 0000000000000..dadb8b29d0977 --- /dev/null +++ b/drivers/dma/fsl-edma-debugfs.c @@ -0,0 +1,116 @@ +#include <linux/debugfs.h> +#include <linux/bitfield.h> + +#include "fsl-edma-common.h" + +#define fsl_edma_debugfs_reg(reg, dir, __name) \ +((sizeof(reg->__name) == sizeof(u32)) ? \ + debugfs_create_x32(__stringify(__name), 0644, dir, (u32 *)®->__name) : \ + debugfs_create_x16(__stringify(__name), 0644, dir, (u16 *)®->__name) \ +) + +#define fsl_edma_debugfs_regv1(reg, dir, __name) \ + debugfs_create_x32(__stringify(__name), 0644, dir, reg.__name) + +static void fsl_edma_debufs_tcdreg(struct fsl_edma_chan *chan, struct dentry *dir) +{ + fsl_edma_debugfs_reg(chan->tcd, dir, saddr); + fsl_edma_debugfs_reg(chan->tcd, dir, soff); + fsl_edma_debugfs_reg(chan->tcd, dir, attr); + fsl_edma_debugfs_reg(chan->tcd, dir, nbytes); + fsl_edma_debugfs_reg(chan->tcd, dir, slast); + fsl_edma_debugfs_reg(chan->tcd, dir, daddr); + fsl_edma_debugfs_reg(chan->tcd, dir, doff); + fsl_edma_debugfs_reg(chan->tcd, dir, citer); + fsl_edma_debugfs_reg(chan->tcd, dir, dlast_sga); + fsl_edma_debugfs_reg(chan->tcd, dir, csr); + fsl_edma_debugfs_reg(chan->tcd, dir, biter); +} + +static void fsl_edma3_debufs_chan(struct fsl_edma_chan *chan, struct dentry *entry) +{ + struct fsl_edma3_ch_reg *reg; + struct dentry *dir; + + reg = container_of(chan->tcd, struct fsl_edma3_ch_reg, tcd); + fsl_edma_debugfs_reg(reg, entry, ch_csr); + fsl_edma_debugfs_reg(reg, entry, ch_int); + fsl_edma_debugfs_reg(reg, entry, ch_sbr); + fsl_edma_debugfs_reg(reg, entry, ch_pri); + fsl_edma_debugfs_reg(reg, entry, ch_mux); + fsl_edma_debugfs_reg(reg, entry, ch_mattr); + + dir = debugfs_create_dir("tcd_regs", entry); + + fsl_edma_debufs_tcdreg(chan, dir); +} + +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 fsl_edma_chan *chan; + struct dentry *dir; + int i; + + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cr); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, es); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, erqh); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, erql); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, eeih); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, eeil); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, seei); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, ceei); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, serq); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cerq); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cint); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cerr); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, ssrt); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cdne); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, inth); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, errh); + fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, errl); + + 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 63d48d046f046..029a72872821d 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; } -- 2.34.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] dmaengine: fsl-emda: add debugfs support 2023-09-19 15:14 ` [PATCH v2 1/2] dmaengine: fsl-emda: add " Frank Li @ 2023-09-19 23:51 ` kernel test robot 2023-09-20 21:45 ` kernel test robot 1 sibling, 0 replies; 7+ messages in thread From: kernel test robot @ 2023-09-19 23:51 UTC (permalink / raw) To: Frank Li, vkoul, linux-kernel, dmaengine, imx; +Cc: oe-kbuild-all Hi Frank, kernel test robot noticed the following build warnings: [auto build test WARNING on vkoul-dmaengine/next] [also build test WARNING on linus/master v6.6-rc2 next-20230919] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-emda-add-debugfs-support/20230920-010257 base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next patch link: https://lore.kernel.org/r/20230919151430.2919042-2-Frank.Li%40nxp.com patch subject: [PATCH v2 1/2] dmaengine: fsl-emda: add debugfs support config: x86_64-randconfig-123-20230920 (https://download.01.org/0day-ci/archive/20230920/202309200741.0Cx6Gz9M-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230920/202309200741.0Cx6Gz9M-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309200741.0Cx6Gz9M-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/dma/fsl-edma-debugfs.c:17:9: sparse: sparse: cast removes address space '__iomem' of expression >> drivers/dma/fsl-edma-debugfs.c:17:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:18:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:18:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:19:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:19:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:20:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:20:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:21:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:21:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:22:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:22:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:23:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:23:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:24:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:24:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:25:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:25:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:26:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:26:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:27:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:27:9: sparse: sparse: cast removes address space '__iomem' of expression drivers/dma/fsl-edma-debugfs.c:35:15: sparse: sparse: cast removes address space '__iomem' of expression >> drivers/dma/fsl-edma-debugfs.c:72:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *cr @@ drivers/dma/fsl-edma-debugfs.c:72:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:72:9: sparse: got void [noderef] __iomem *cr >> drivers/dma/fsl-edma-debugfs.c:73:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *es @@ drivers/dma/fsl-edma-debugfs.c:73:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:73:9: sparse: got void [noderef] __iomem *es >> drivers/dma/fsl-edma-debugfs.c:74:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *erqh @@ drivers/dma/fsl-edma-debugfs.c:74:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:74:9: sparse: got void [noderef] __iomem *erqh >> drivers/dma/fsl-edma-debugfs.c:75:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *erql @@ drivers/dma/fsl-edma-debugfs.c:75:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:75:9: sparse: got void [noderef] __iomem *erql >> drivers/dma/fsl-edma-debugfs.c:76:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *eeih @@ drivers/dma/fsl-edma-debugfs.c:76:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:76:9: sparse: got void [noderef] __iomem *eeih >> drivers/dma/fsl-edma-debugfs.c:77:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *eeil @@ drivers/dma/fsl-edma-debugfs.c:77:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:77:9: sparse: got void [noderef] __iomem *eeil >> drivers/dma/fsl-edma-debugfs.c:78:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *seei @@ drivers/dma/fsl-edma-debugfs.c:78:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:78:9: sparse: got void [noderef] __iomem *seei >> drivers/dma/fsl-edma-debugfs.c:79:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *ceei @@ drivers/dma/fsl-edma-debugfs.c:79:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:79:9: sparse: got void [noderef] __iomem *ceei >> drivers/dma/fsl-edma-debugfs.c:80:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *serq @@ drivers/dma/fsl-edma-debugfs.c:80:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:80:9: sparse: got void [noderef] __iomem *serq >> drivers/dma/fsl-edma-debugfs.c:81:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *cerq @@ drivers/dma/fsl-edma-debugfs.c:81:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:81:9: sparse: got void [noderef] __iomem *cerq >> drivers/dma/fsl-edma-debugfs.c:82:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *cint @@ drivers/dma/fsl-edma-debugfs.c:82:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:82:9: sparse: got void [noderef] __iomem *cint >> drivers/dma/fsl-edma-debugfs.c:83:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *cerr @@ drivers/dma/fsl-edma-debugfs.c:83:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:83:9: sparse: got void [noderef] __iomem *cerr >> drivers/dma/fsl-edma-debugfs.c:84:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *ssrt @@ drivers/dma/fsl-edma-debugfs.c:84:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:84:9: sparse: got void [noderef] __iomem *ssrt >> drivers/dma/fsl-edma-debugfs.c:85:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *cdne @@ drivers/dma/fsl-edma-debugfs.c:85:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:85:9: sparse: got void [noderef] __iomem *cdne >> drivers/dma/fsl-edma-debugfs.c:86:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *inth @@ drivers/dma/fsl-edma-debugfs.c:86:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:86:9: sparse: got void [noderef] __iomem *inth >> drivers/dma/fsl-edma-debugfs.c:87:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *errh @@ drivers/dma/fsl-edma-debugfs.c:87:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:87:9: sparse: got void [noderef] __iomem *errh >> drivers/dma/fsl-edma-debugfs.c:88:9: sparse: sparse: incorrect type in argument 4 (different address spaces) @@ expected unsigned int [usertype] *value @@ got void [noderef] __iomem *errl @@ drivers/dma/fsl-edma-debugfs.c:88:9: sparse: expected unsigned int [usertype] *value drivers/dma/fsl-edma-debugfs.c:88:9: sparse: got void [noderef] __iomem *errl vim +/__iomem +17 drivers/dma/fsl-edma-debugfs.c 11 12 #define fsl_edma_debugfs_regv1(reg, dir, __name) \ 13 debugfs_create_x32(__stringify(__name), 0644, dir, reg.__name) 14 15 static void fsl_edma_debufs_tcdreg(struct fsl_edma_chan *chan, struct dentry *dir) 16 { > 17 fsl_edma_debugfs_reg(chan->tcd, dir, saddr); 18 fsl_edma_debugfs_reg(chan->tcd, dir, soff); 19 fsl_edma_debugfs_reg(chan->tcd, dir, attr); 20 fsl_edma_debugfs_reg(chan->tcd, dir, nbytes); 21 fsl_edma_debugfs_reg(chan->tcd, dir, slast); 22 fsl_edma_debugfs_reg(chan->tcd, dir, daddr); 23 fsl_edma_debugfs_reg(chan->tcd, dir, doff); > 24 fsl_edma_debugfs_reg(chan->tcd, dir, citer); > 25 fsl_edma_debugfs_reg(chan->tcd, dir, dlast_sga); 26 fsl_edma_debugfs_reg(chan->tcd, dir, csr); > 27 fsl_edma_debugfs_reg(chan->tcd, dir, biter); 28 } 29 30 static void fsl_edma3_debufs_chan(struct fsl_edma_chan *chan, struct dentry *entry) 31 { 32 struct fsl_edma3_ch_reg *reg; 33 struct dentry *dir; 34 35 reg = container_of(chan->tcd, struct fsl_edma3_ch_reg, tcd); 36 fsl_edma_debugfs_reg(reg, entry, ch_csr); 37 fsl_edma_debugfs_reg(reg, entry, ch_int); 38 fsl_edma_debugfs_reg(reg, entry, ch_sbr); 39 fsl_edma_debugfs_reg(reg, entry, ch_pri); 40 fsl_edma_debugfs_reg(reg, entry, ch_mux); 41 fsl_edma_debugfs_reg(reg, entry, ch_mattr); 42 43 dir = debugfs_create_dir("tcd_regs", entry); 44 45 fsl_edma_debufs_tcdreg(chan, dir); 46 } 47 48 static void fsl_edma3_debugfs_init(struct fsl_edma_engine *edma) 49 { 50 struct fsl_edma_chan *chan; 51 struct dentry *dir; 52 int i; 53 54 for (i = 0; i < edma->n_chans; i++) { 55 if (edma->chan_masked & BIT(i)) 56 continue; 57 58 chan = &edma->chans[i]; 59 dir = debugfs_create_dir(chan->chan_name, edma->dma_dev.dbg_dev_root); 60 61 fsl_edma3_debufs_chan(chan, dir); 62 } 63 64 } 65 66 static void fsl_edma_debugfs_init(struct fsl_edma_engine *edma) 67 { 68 struct fsl_edma_chan *chan; 69 struct dentry *dir; 70 int i; 71 > 72 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cr); > 73 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, es); > 74 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, erqh); > 75 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, erql); > 76 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, eeih); > 77 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, eeil); > 78 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, seei); > 79 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, ceei); > 80 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, serq); > 81 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cerq); > 82 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cint); > 83 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cerr); > 84 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, ssrt); > 85 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, cdne); > 86 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, inth); > 87 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, errh); > 88 fsl_edma_debugfs_regv1(edma->regs, edma->dma_dev.dbg_dev_root, errl); 89 90 for (i = 0; i < edma->n_chans; i++) { 91 if (edma->chan_masked & BIT(i)) 92 continue; 93 94 chan = &edma->chans[i]; 95 dir = debugfs_create_dir(chan->chan_name, edma->dma_dev.dbg_dev_root); 96 97 fsl_edma_debufs_tcdreg(chan, dir); 98 } 99 } 100 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] dmaengine: fsl-emda: add debugfs support 2023-09-19 15:14 ` [PATCH v2 1/2] dmaengine: fsl-emda: add " Frank Li 2023-09-19 23:51 ` kernel test robot @ 2023-09-20 21:45 ` kernel test robot 1 sibling, 0 replies; 7+ messages in thread From: kernel test robot @ 2023-09-20 21:45 UTC (permalink / raw) To: Frank Li, vkoul, linux-kernel, dmaengine, imx; +Cc: oe-kbuild-all Hi Frank, kernel test robot noticed the following build errors: [auto build test ERROR on vkoul-dmaengine/next] [also build test ERROR on linus/master v6.6-rc2 next-20230920] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-emda-add-debugfs-support/20230920-010257 base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next patch link: https://lore.kernel.org/r/20230919151430.2919042-2-Frank.Li%40nxp.com patch subject: [PATCH v2 1/2] dmaengine: fsl-emda: add debugfs support config: arm-imxrt_defconfig (https://download.01.org/0day-ci/archive/20230921/202309210500.owiirl4c-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230921/202309210500.owiirl4c-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309210500.owiirl4c-lkp@intel.com/ All error/warnings (new ones prefixed by >>): In file included from drivers/dma/fsl-edma-main.c:24: >> drivers/dma/fsl-edma-common.h:342:47: warning: 'struct dw_edma' declared inside parameter list will not be visible outside of this definition or declaration 342 | static inline void fsl_edma_debugfs_on(struct dw_edma *edma) | ^~~~~~~ drivers/dma/fsl-edma-main.c: In function 'fsl_edma_probe': >> drivers/dma/fsl-edma-main.c:615:29: error: passing argument 1 of 'fsl_edma_debugfs_on' from incompatible pointer type [-Werror=incompatible-pointer-types] 615 | fsl_edma_debugfs_on(fsl_edma); | ^~~~~~~~ | | | struct fsl_edma_engine * In file included from drivers/dma/fsl-edma-main.c:24: drivers/dma/fsl-edma-common.h:342:56: note: expected 'struct dw_edma *' but argument is of type 'struct fsl_edma_engine *' 342 | static inline void fsl_edma_debugfs_on(struct dw_edma *edma) | ~~~~~~~~~~~~~~~~^~~~ cc1: some warnings being treated as errors -- In file included from drivers/dma/fsl-edma-common.c:13: >> drivers/dma/fsl-edma-common.h:342:47: warning: 'struct dw_edma' declared inside parameter list will not be visible outside of this definition or declaration 342 | static inline void fsl_edma_debugfs_on(struct dw_edma *edma) | ^~~~~~~ vim +/fsl_edma_debugfs_on +615 drivers/dma/fsl-edma-main.c 416 417 static int fsl_edma_probe(struct platform_device *pdev) 418 { 419 const struct of_device_id *of_id = 420 of_match_device(fsl_edma_dt_ids, &pdev->dev); 421 struct device_node *np = pdev->dev.of_node; 422 struct fsl_edma_engine *fsl_edma; 423 const struct fsl_edma_drvdata *drvdata = NULL; 424 u32 chan_mask[2] = {0, 0}; 425 struct edma_regs *regs; 426 int chans; 427 int ret, i; 428 429 if (of_id) 430 drvdata = of_id->data; 431 if (!drvdata) { 432 dev_err(&pdev->dev, "unable to find driver data\n"); 433 return -EINVAL; 434 } 435 436 ret = of_property_read_u32(np, "dma-channels", &chans); 437 if (ret) { 438 dev_err(&pdev->dev, "Can't get dma-channels.\n"); 439 return ret; 440 } 441 442 fsl_edma = devm_kzalloc(&pdev->dev, struct_size(fsl_edma, chans, chans), 443 GFP_KERNEL); 444 if (!fsl_edma) 445 return -ENOMEM; 446 447 fsl_edma->drvdata = drvdata; 448 fsl_edma->n_chans = chans; 449 mutex_init(&fsl_edma->fsl_edma_mutex); 450 451 fsl_edma->membase = devm_platform_ioremap_resource(pdev, 0); 452 if (IS_ERR(fsl_edma->membase)) 453 return PTR_ERR(fsl_edma->membase); 454 455 if (!(drvdata->flags & FSL_EDMA_DRV_SPLIT_REG)) { 456 fsl_edma_setup_regs(fsl_edma); 457 regs = &fsl_edma->regs; 458 } 459 460 if (drvdata->flags & FSL_EDMA_DRV_HAS_DMACLK) { 461 fsl_edma->dmaclk = devm_clk_get_enabled(&pdev->dev, "dma"); 462 if (IS_ERR(fsl_edma->dmaclk)) { 463 dev_err(&pdev->dev, "Missing DMA block clock.\n"); 464 return PTR_ERR(fsl_edma->dmaclk); 465 } 466 } 467 468 if (drvdata->flags & FSL_EDMA_DRV_HAS_CHCLK) { 469 fsl_edma->chclk = devm_clk_get_enabled(&pdev->dev, "mp"); 470 if (IS_ERR(fsl_edma->chclk)) { 471 dev_err(&pdev->dev, "Missing MP block clock.\n"); 472 return PTR_ERR(fsl_edma->chclk); 473 } 474 } 475 476 ret = of_property_read_variable_u32_array(np, "dma-channel-mask", chan_mask, 1, 2); 477 478 if (ret > 0) { 479 fsl_edma->chan_masked = chan_mask[1]; 480 fsl_edma->chan_masked <<= 32; 481 fsl_edma->chan_masked |= chan_mask[0]; 482 } 483 484 for (i = 0; i < fsl_edma->drvdata->dmamuxs; i++) { 485 char clkname[32]; 486 487 /* eDMAv3 mux register move to TCD area if ch_mux exist */ 488 if (drvdata->flags & FSL_EDMA_DRV_SPLIT_REG) 489 break; 490 491 fsl_edma->muxbase[i] = devm_platform_ioremap_resource(pdev, 492 1 + i); 493 if (IS_ERR(fsl_edma->muxbase[i])) { 494 /* on error: disable all previously enabled clks */ 495 fsl_disable_clocks(fsl_edma, i); 496 return PTR_ERR(fsl_edma->muxbase[i]); 497 } 498 499 sprintf(clkname, "dmamux%d", i); 500 fsl_edma->muxclk[i] = devm_clk_get_enabled(&pdev->dev, clkname); 501 if (IS_ERR(fsl_edma->muxclk[i])) { 502 dev_err(&pdev->dev, "Missing DMAMUX block clock.\n"); 503 /* on error: disable all previously enabled clks */ 504 return PTR_ERR(fsl_edma->muxclk[i]); 505 } 506 } 507 508 fsl_edma->big_endian = of_property_read_bool(np, "big-endian"); 509 510 if (drvdata->flags & FSL_EDMA_DRV_HAS_PD) { 511 ret = fsl_edma3_attach_pd(pdev, fsl_edma); 512 if (ret) 513 return ret; 514 } 515 516 INIT_LIST_HEAD(&fsl_edma->dma_dev.channels); 517 for (i = 0; i < fsl_edma->n_chans; i++) { 518 struct fsl_edma_chan *fsl_chan = &fsl_edma->chans[i]; 519 int len; 520 521 if (fsl_edma->chan_masked & BIT(i)) 522 continue; 523 524 snprintf(fsl_chan->chan_name, sizeof(fsl_chan->chan_name), "%s-CH%02d", 525 dev_name(&pdev->dev), i); 526 527 fsl_chan->edma = fsl_edma; 528 fsl_chan->pm_state = RUNNING; 529 fsl_chan->slave_id = 0; 530 fsl_chan->idle = true; 531 fsl_chan->dma_dir = DMA_NONE; 532 fsl_chan->vchan.desc_free = fsl_edma_free_desc; 533 534 len = (drvdata->flags & FSL_EDMA_DRV_SPLIT_REG) ? 535 offsetof(struct fsl_edma3_ch_reg, tcd) : 0; 536 fsl_chan->tcd = fsl_edma->membase 537 + i * drvdata->chreg_space_sz + drvdata->chreg_off + len; 538 539 fsl_chan->pdev = pdev; 540 vchan_init(&fsl_chan->vchan, &fsl_edma->dma_dev); 541 542 edma_write_tcdreg(fsl_chan, 0, csr); 543 fsl_edma_chan_mux(fsl_chan, 0, false); 544 } 545 546 ret = fsl_edma->drvdata->setup_irq(pdev, fsl_edma); 547 if (ret) 548 return ret; 549 550 dma_cap_set(DMA_PRIVATE, fsl_edma->dma_dev.cap_mask); 551 dma_cap_set(DMA_SLAVE, fsl_edma->dma_dev.cap_mask); 552 dma_cap_set(DMA_CYCLIC, fsl_edma->dma_dev.cap_mask); 553 dma_cap_set(DMA_MEMCPY, fsl_edma->dma_dev.cap_mask); 554 555 fsl_edma->dma_dev.dev = &pdev->dev; 556 fsl_edma->dma_dev.device_alloc_chan_resources 557 = fsl_edma_alloc_chan_resources; 558 fsl_edma->dma_dev.device_free_chan_resources 559 = fsl_edma_free_chan_resources; 560 fsl_edma->dma_dev.device_tx_status = fsl_edma_tx_status; 561 fsl_edma->dma_dev.device_prep_slave_sg = fsl_edma_prep_slave_sg; 562 fsl_edma->dma_dev.device_prep_dma_cyclic = fsl_edma_prep_dma_cyclic; 563 fsl_edma->dma_dev.device_prep_dma_memcpy = fsl_edma_prep_memcpy; 564 fsl_edma->dma_dev.device_config = fsl_edma_slave_config; 565 fsl_edma->dma_dev.device_pause = fsl_edma_pause; 566 fsl_edma->dma_dev.device_resume = fsl_edma_resume; 567 fsl_edma->dma_dev.device_terminate_all = fsl_edma_terminate_all; 568 fsl_edma->dma_dev.device_synchronize = fsl_edma_synchronize; 569 fsl_edma->dma_dev.device_issue_pending = fsl_edma_issue_pending; 570 571 fsl_edma->dma_dev.src_addr_widths = FSL_EDMA_BUSWIDTHS; 572 fsl_edma->dma_dev.dst_addr_widths = FSL_EDMA_BUSWIDTHS; 573 574 if (drvdata->flags & FSL_EDMA_DRV_BUS_8BYTE) { 575 fsl_edma->dma_dev.src_addr_widths |= BIT(DMA_SLAVE_BUSWIDTH_8_BYTES); 576 fsl_edma->dma_dev.dst_addr_widths |= BIT(DMA_SLAVE_BUSWIDTH_8_BYTES); 577 } 578 579 fsl_edma->dma_dev.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); 580 if (drvdata->flags & FSL_EDMA_DRV_DEV_TO_DEV) 581 fsl_edma->dma_dev.directions |= BIT(DMA_DEV_TO_DEV); 582 583 fsl_edma->dma_dev.copy_align = drvdata->flags & FSL_EDMA_DRV_ALIGN_64BYTE ? 584 DMAENGINE_ALIGN_64_BYTES : 585 DMAENGINE_ALIGN_32_BYTES; 586 587 /* Per worst case 'nbytes = 1' take CITER as the max_seg_size */ 588 dma_set_max_seg_size(fsl_edma->dma_dev.dev, 0x3fff); 589 590 fsl_edma->dma_dev.residue_granularity = DMA_RESIDUE_GRANULARITY_SEGMENT; 591 592 platform_set_drvdata(pdev, fsl_edma); 593 594 ret = dma_async_device_register(&fsl_edma->dma_dev); 595 if (ret) { 596 dev_err(&pdev->dev, 597 "Can't register Freescale eDMA engine. (%d)\n", ret); 598 return ret; 599 } 600 601 ret = of_dma_controller_register(np, 602 drvdata->flags & FSL_EDMA_DRV_SPLIT_REG ? fsl_edma3_xlate : fsl_edma_xlate, 603 fsl_edma); 604 if (ret) { 605 dev_err(&pdev->dev, 606 "Can't register Freescale eDMA of_dma. (%d)\n", ret); 607 dma_async_device_unregister(&fsl_edma->dma_dev); 608 return ret; 609 } 610 611 /* enable round robin arbitration */ 612 if (!(drvdata->flags & FSL_EDMA_DRV_SPLIT_REG)) 613 edma_writel(fsl_edma, EDMA_CR_ERGA | EDMA_CR_ERCA, regs->cr); 614 > 615 fsl_edma_debugfs_on(fsl_edma); 616 617 return 0; 618 } 619 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support 2023-09-19 15:14 [PATCH v2 0/2] dmaengine: fsl_edma: add trace and debugfs support Frank Li 2023-09-19 15:14 ` [PATCH v2 1/2] dmaengine: fsl-emda: add " Frank Li @ 2023-09-19 15:14 ` Frank Li 2023-09-19 21:47 ` kernel test robot 2023-09-20 2:49 ` kernel test robot 1 sibling, 2 replies; 7+ messages in thread From: Frank Li @ 2023-09-19 15:14 UTC (permalink / raw) To: vkoul, linux-kernel, dmaengine, imx 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 <Frank.Li@nxp.com> --- 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 a51c6397bcad0..40b2dd554e5dc 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 a0f5741abcc47..0182e2695fdc0 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 ecaba563d4897..a9e27110ac7d7 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 0000000000000..28300ad80bb75 --- /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 0000000000000..e982651c682f1 --- /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 <linux/types.h> +#include <linux/tracepoint.h> + +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 %08lx: value %08x", + __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 = tcd->saddr, + __entry->soff = tcd->soff, + __entry->attr = tcd->attr, + __entry->nbytes = tcd->nbytes, + __entry->slast = tcd->slast, + __entry->daddr = tcd->daddr, + __entry->doff = tcd->doff, + __entry->citer = tcd->citer, + __entry->dlast_sga = tcd->dlast_sga, + __entry->csr = tcd->csr, + __entry->biter = 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 <trace/define_trace.h> -- 2.34.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support 2023-09-19 15:14 ` [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support Frank Li @ 2023-09-19 21:47 ` kernel test robot 2023-09-20 2:49 ` kernel test robot 1 sibling, 0 replies; 7+ messages in thread From: kernel test robot @ 2023-09-19 21:47 UTC (permalink / raw) To: Frank Li, vkoul, linux-kernel, dmaengine, imx; +Cc: oe-kbuild-all Hi Frank, kernel test robot noticed the following build warnings: [auto build test WARNING on vkoul-dmaengine/next] [also build test WARNING on linus/master v6.6-rc2 next-20230919] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-emda-add-debugfs-support/20230920-010257 base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next patch link: https://lore.kernel.org/r/20230919151430.2919042-3-Frank.Li%40nxp.com patch subject: [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support config: arc-randconfig-001-20230920 (https://download.01.org/0day-ci/archive/20230920/202309200524.QTINjSsC-lkp@intel.com/config) compiler: arceb-elf-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230920/202309200524.QTINjSsC-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309200524.QTINjSsC-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from include/trace/define_trace.h:102, from drivers/dma/fsl-edma-trace.h:134, from drivers/dma/fsl-edma-common.h:238, from drivers/dma/fsl-edma-trace.c:4: drivers/dma/./fsl-edma-trace.h: In function 'trace_raw_output_edma_log_io': >> drivers/dma/./fsl-edma-trace.h:28:19: warning: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'int' [-Wformat=] 28 | TP_printk("offset %08lx: value %08x", | ^~~~~~~~~~~~~~~~~~~~~~~~~~ include/trace/trace_events.h:203:34: note: in definition of macro 'DECLARE_EVENT_CLASS' 203 | trace_event_printf(iter, print); \ | ^~~~~ drivers/dma/./fsl-edma-trace.h:28:9: note: in expansion of macro 'TP_printk' 28 | TP_printk("offset %08lx: value %08x", | ^~~~~~~~~ In file included from include/trace/trace_events.h:237: drivers/dma/./fsl-edma-trace.h:28:31: note: format string is defined here 28 | TP_printk("offset %08lx: value %08x", | ~~~~^ | | | long unsigned int | %08x vim +28 drivers/dma/./fsl-edma-trace.h 14 15 DECLARE_EVENT_CLASS(edma_log_io, 16 TP_PROTO(struct fsl_edma_engine *edma, void __iomem *addr, u32 value), 17 TP_ARGS(edma, addr, value), 18 TP_STRUCT__entry( 19 __field(struct fsl_edma_engine *, edma) 20 __field(void __iomem *, addr) 21 __field(u32, value) 22 ), 23 TP_fast_assign( 24 __entry->edma = edma; 25 __entry->addr = addr; 26 __entry->value = value; 27 ), > 28 TP_printk("offset %08lx: value %08x", 29 __entry->addr - __entry->edma->membase, __entry->value) 30 ); 31 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support 2023-09-19 15:14 ` [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support Frank Li 2023-09-19 21:47 ` kernel test robot @ 2023-09-20 2:49 ` kernel test robot 1 sibling, 0 replies; 7+ messages in thread From: kernel test robot @ 2023-09-20 2:49 UTC (permalink / raw) To: Frank Li, vkoul, linux-kernel, dmaengine, imx; +Cc: oe-kbuild-all Hi Frank, kernel test robot noticed the following build warnings: [auto build test WARNING on vkoul-dmaengine/next] [also build test WARNING on linus/master v6.6-rc2 next-20230919] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Frank-Li/dmaengine-fsl-emda-add-debugfs-support/20230920-010257 base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git next patch link: https://lore.kernel.org/r/20230919151430.2919042-3-Frank.Li%40nxp.com patch subject: [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support config: x86_64-randconfig-123-20230920 (https://download.01.org/0day-ci/archive/20230920/202309201032.LMx2JZTV-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230920/202309201032.LMx2JZTV-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309201032.LMx2JZTV-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) drivers/dma/fsl-edma-trace.c: note: in included file (through include/trace/trace_events.h, include/trace/define_trace.h, drivers/dma/fsl-edma-trace.h, ...): >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] saddr @@ got restricted __le32 [usertype] saddr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] saddr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] saddr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] soff @@ got restricted __le16 [usertype] soff @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] soff drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] soff >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] attr @@ got restricted __le16 [usertype] attr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] attr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] attr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] nbytes @@ got restricted __le32 [usertype] nbytes @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] nbytes drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] nbytes >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] slast @@ got restricted __le32 [usertype] slast @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] slast drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] slast >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] daddr @@ got restricted __le32 [usertype] daddr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] daddr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] daddr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] doff @@ got restricted __le16 [usertype] doff @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] doff drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] doff >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] citer @@ got restricted __le16 [usertype] citer @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] citer drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] citer >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] dlast_sga @@ got restricted __le32 [usertype] dlast_sga @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] dlast_sga drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] dlast_sga >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] csr @@ got restricted __le16 [usertype] csr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] csr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] csr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] biter @@ got restricted __le16 [usertype] biter @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] biter drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] biter drivers/dma/fsl-edma-trace.c: note: in included file (through include/trace/perf.h, include/trace/define_trace.h, drivers/dma/fsl-edma-trace.h, ...): >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] saddr @@ got restricted __le32 [usertype] saddr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] saddr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] saddr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] soff @@ got restricted __le16 [usertype] soff @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] soff drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] soff >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] attr @@ got restricted __le16 [usertype] attr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] attr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] attr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] nbytes @@ got restricted __le32 [usertype] nbytes @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] nbytes drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] nbytes >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] slast @@ got restricted __le32 [usertype] slast @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] slast drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] slast >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] daddr @@ got restricted __le32 [usertype] daddr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] daddr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] daddr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] doff @@ got restricted __le16 [usertype] doff @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] doff drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] doff >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] citer @@ got restricted __le16 [usertype] citer @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] citer drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] citer >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] dlast_sga @@ got restricted __le32 [usertype] dlast_sga @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned int [usertype] dlast_sga drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le32 [usertype] dlast_sga >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] csr @@ got restricted __le16 [usertype] csr @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] csr drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] csr >> drivers/dma/./fsl-edma-trace.h:62:1: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] biter @@ got restricted __le16 [usertype] biter @@ drivers/dma/./fsl-edma-trace.h:62:1: sparse: expected unsigned short [usertype] biter drivers/dma/./fsl-edma-trace.h:62:1: sparse: got restricted __le16 [usertype] biter vim +62 drivers/dma/./fsl-edma-trace.h 61 > 62 DECLARE_EVENT_CLASS(edma_log_tcd, 63 TP_PROTO(struct fsl_edma_engine *edma, struct fsl_edma_hw_tcd *tcd), 64 TP_ARGS(edma, tcd), 65 TP_STRUCT__entry( 66 __field(struct fsl_edma_engine *, edma) 67 __field(u32, saddr) 68 __field(u16, soff) 69 __field(u16, attr) 70 __field(u32, nbytes) 71 __field(u32, slast) 72 __field(u32, daddr) 73 __field(u16, doff) 74 __field(u16, citer) 75 __field(u32, dlast_sga) 76 __field(u16, csr) 77 __field(u16, biter) 78 79 ), 80 TP_fast_assign( 81 __entry->edma = edma; 82 __entry->saddr = tcd->saddr, 83 __entry->soff = tcd->soff, 84 __entry->attr = tcd->attr, 85 __entry->nbytes = tcd->nbytes, 86 __entry->slast = tcd->slast, 87 __entry->daddr = tcd->daddr, 88 __entry->doff = tcd->doff, 89 __entry->citer = tcd->citer, 90 __entry->dlast_sga = tcd->dlast_sga, 91 __entry->csr = tcd->csr, 92 __entry->biter = tcd->biter; 93 ), 94 TP_printk("\n==== TCD =====\n" 95 " saddr: 0x%08x\n" 96 " soff: 0x%04x\n" 97 " attr: 0x%04x\n" 98 " nbytes: 0x%08x\n" 99 " slast: 0x%08x\n" 100 " daddr: 0x%08x\n" 101 " doff: 0x%04x\n" 102 " citer: 0x%04x\n" 103 " dlast: 0x%08x\n" 104 " csr: 0x%04x\n" 105 " biter: 0x%04x\n", 106 __entry->saddr, 107 __entry->soff, 108 __entry->attr, 109 __entry->nbytes, 110 __entry->slast, 111 __entry->daddr, 112 __entry->doff, 113 __entry->citer, 114 __entry->dlast_sga, 115 __entry->csr, 116 __entry->biter) 117 ); 118 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-09-20 21:45 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-09-19 15:14 [PATCH v2 0/2] dmaengine: fsl_edma: add trace and debugfs support Frank Li 2023-09-19 15:14 ` [PATCH v2 1/2] dmaengine: fsl-emda: add " Frank Li 2023-09-19 23:51 ` kernel test robot 2023-09-20 21:45 ` kernel test robot 2023-09-19 15:14 ` [PATCH v2 2/2] dmaengine: fsl-edma: add trace event support Frank Li 2023-09-19 21:47 ` kernel test robot 2023-09-20 2:49 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome