18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * c8sectpfe-debugfs.c - C8SECTPFE STi DVB driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) STMicroelectronics 2015 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Author: Peter Griffin <peter.griffin@linaro.org> 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci#include <linux/debugfs.h> 118c2ecf20Sopenharmony_ci#include <linux/device.h> 128c2ecf20Sopenharmony_ci#include <linux/interrupt.h> 138c2ecf20Sopenharmony_ci#include <linux/io.h> 148c2ecf20Sopenharmony_ci#include <linux/kernel.h> 158c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 168c2ecf20Sopenharmony_ci#include <linux/slab.h> 178c2ecf20Sopenharmony_ci#include <linux/types.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include "c8sectpfe-debugfs.h" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define dump_register(nm ...) \ 228c2ecf20Sopenharmony_ci{ \ 238c2ecf20Sopenharmony_ci .name = #nm, \ 248c2ecf20Sopenharmony_ci .offset = nm, \ 258c2ecf20Sopenharmony_ci} 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic const struct debugfs_reg32 fei_sys_regs[] = { 288c2ecf20Sopenharmony_ci dump_register(SYS_INPUT_ERR_STATUS), 298c2ecf20Sopenharmony_ci dump_register(SYS_OTHER_ERR_STATUS), 308c2ecf20Sopenharmony_ci dump_register(SYS_INPUT_ERR_MASK), 318c2ecf20Sopenharmony_ci dump_register(SYS_DMA_ROUTE), 328c2ecf20Sopenharmony_ci dump_register(SYS_INPUT_CLKEN), 338c2ecf20Sopenharmony_ci dump_register(IBENABLE_MASK), 348c2ecf20Sopenharmony_ci dump_register(SYS_OTHER_CLKEN), 358c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_IB), 368c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_MIB), 378c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_SWTS), 388c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_TSOUT), 398c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_CCSC), 408c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_RAM), 418c2ecf20Sopenharmony_ci dump_register(SYS_CFG_NUM_TP), 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(0)), 448c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(0)), 458c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(0)), 468c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(0)), 478c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(0)), 488c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(0)), 498c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(0)), 508c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(0)), 518c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(0)), 528c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(0)), 538c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(0)), 548c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(0)), 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(1)), 578c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(1)), 588c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(1)), 598c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(1)), 608c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(1)), 618c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(1)), 628c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(1)), 638c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(1)), 648c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(1)), 658c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(1)), 668c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(1)), 678c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(1)), 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(2)), 708c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(2)), 718c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(2)), 728c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(2)), 738c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(2)), 748c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(2)), 758c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(2)), 768c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(2)), 778c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(2)), 788c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(2)), 798c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(2)), 808c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(2)), 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(3)), 838c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(3)), 848c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(3)), 858c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(3)), 868c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(3)), 878c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(3)), 888c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(3)), 898c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(3)), 908c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(3)), 918c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(3)), 928c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(3)), 938c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(3)), 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(4)), 968c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(4)), 978c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(4)), 988c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(4)), 998c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(4)), 1008c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(4)), 1018c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(4)), 1028c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(4)), 1038c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(4)), 1048c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(4)), 1058c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(4)), 1068c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(4)), 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(5)), 1098c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(5)), 1108c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(5)), 1118c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(5)), 1128c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(5)), 1138c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(5)), 1148c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(5)), 1158c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(5)), 1168c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(5)), 1178c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(5)), 1188c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(5)), 1198c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(5)), 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_IP_FMT_CFG(6)), 1228c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_TAGBYTES_CFG(6)), 1238c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PID_SET(6)), 1248c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PKT_LEN(6)), 1258c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_STRT(6)), 1268c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_BUFF_END(6)), 1278c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_READ_PNT(6)), 1288c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_WRT_PNT(6)), 1298c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_PRI_THRLD(6)), 1308c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_STAT(6)), 1318c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_MASK(6)), 1328c2ecf20Sopenharmony_ci dump_register(C8SECTPFE_IB_SYS(6)), 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci dump_register(DMA_CPU_ID), 1358c2ecf20Sopenharmony_ci dump_register(DMA_CPU_VCR), 1368c2ecf20Sopenharmony_ci dump_register(DMA_CPU_RUN), 1378c2ecf20Sopenharmony_ci dump_register(DMA_CPU_PC), 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_ci dump_register(DMA_PER_TPn_DREQ_MASK), 1408c2ecf20Sopenharmony_ci dump_register(DMA_PER_TPn_DACK_SET), 1418c2ecf20Sopenharmony_ci dump_register(DMA_PER_TPn_DREQ), 1428c2ecf20Sopenharmony_ci dump_register(DMA_PER_TPn_DACK), 1438c2ecf20Sopenharmony_ci dump_register(DMA_PER_DREQ_MODE), 1448c2ecf20Sopenharmony_ci dump_register(DMA_PER_STBUS_SYNC), 1458c2ecf20Sopenharmony_ci dump_register(DMA_PER_STBUS_ACCESS), 1468c2ecf20Sopenharmony_ci dump_register(DMA_PER_STBUS_ADDRESS), 1478c2ecf20Sopenharmony_ci dump_register(DMA_PER_IDLE_INT), 1488c2ecf20Sopenharmony_ci dump_register(DMA_PER_PRIORITY), 1498c2ecf20Sopenharmony_ci dump_register(DMA_PER_MAX_OPCODE), 1508c2ecf20Sopenharmony_ci dump_register(DMA_PER_MAX_CHUNK), 1518c2ecf20Sopenharmony_ci dump_register(DMA_PER_PAGE_SIZE), 1528c2ecf20Sopenharmony_ci dump_register(DMA_PER_MBOX_STATUS), 1538c2ecf20Sopenharmony_ci dump_register(DMA_PER_MBOX_SET), 1548c2ecf20Sopenharmony_ci dump_register(DMA_PER_MBOX_CLEAR), 1558c2ecf20Sopenharmony_ci dump_register(DMA_PER_MBOX_MASK), 1568c2ecf20Sopenharmony_ci dump_register(DMA_PER_INJECT_PKT_SRC), 1578c2ecf20Sopenharmony_ci dump_register(DMA_PER_INJECT_PKT_DEST), 1588c2ecf20Sopenharmony_ci dump_register(DMA_PER_INJECT_PKT_ADDR), 1598c2ecf20Sopenharmony_ci dump_register(DMA_PER_INJECT_PKT), 1608c2ecf20Sopenharmony_ci dump_register(DMA_PER_PAT_PTR_INIT), 1618c2ecf20Sopenharmony_ci dump_register(DMA_PER_PAT_PTR), 1628c2ecf20Sopenharmony_ci dump_register(DMA_PER_SLEEP_MASK), 1638c2ecf20Sopenharmony_ci dump_register(DMA_PER_SLEEP_COUNTER), 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci dump_register(DMA_FIRMWARE_VERSION), 1668c2ecf20Sopenharmony_ci dump_register(DMA_PTRREC_BASE), 1678c2ecf20Sopenharmony_ci dump_register(DMA_PTRREC_INPUT_OFFSET), 1688c2ecf20Sopenharmony_ci dump_register(DMA_ERRREC_BASE), 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(0)), 1718c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(1)), 1728c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(2)), 1738c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(3)), 1748c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(4)), 1758c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(5)), 1768c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(6)), 1778c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(7)), 1788c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(8)), 1798c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(9)), 1808c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(10)), 1818c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(11)), 1828c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(12)), 1838c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(13)), 1848c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(14)), 1858c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(15)), 1868c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(16)), 1878c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(17)), 1888c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(18)), 1898c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(19)), 1908c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(20)), 1918c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(21)), 1928c2ecf20Sopenharmony_ci dump_register(DMA_ERROR_RECORD(22)), 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci dump_register(DMA_IDLE_REQ), 1958c2ecf20Sopenharmony_ci dump_register(DMA_FIRMWARE_CONFIG), 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(0)), 1988c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(1)), 1998c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(2)), 2008c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(3)), 2018c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(4)), 2028c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(5)), 2038c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(6)), 2048c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(7)), 2058c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(8)), 2068c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(9)), 2078c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(10)), 2088c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(11)), 2098c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(12)), 2108c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(13)), 2118c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(14)), 2128c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(15)), 2138c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(16)), 2148c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(17)), 2158c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(18)), 2168c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(19)), 2178c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(20)), 2188c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(21)), 2198c2ecf20Sopenharmony_ci dump_register(PIDF_BASE(22)), 2208c2ecf20Sopenharmony_ci dump_register(PIDF_LEAK_ENABLE), 2218c2ecf20Sopenharmony_ci dump_register(PIDF_LEAK_STATUS), 2228c2ecf20Sopenharmony_ci dump_register(PIDF_LEAK_COUNT_RESET), 2238c2ecf20Sopenharmony_ci dump_register(PIDF_LEAK_COUNTER), 2248c2ecf20Sopenharmony_ci}; 2258c2ecf20Sopenharmony_ci 2268c2ecf20Sopenharmony_civoid c8sectpfe_debugfs_init(struct c8sectpfei *fei) 2278c2ecf20Sopenharmony_ci{ 2288c2ecf20Sopenharmony_ci fei->regset = devm_kzalloc(fei->dev, sizeof(*fei->regset), GFP_KERNEL); 2298c2ecf20Sopenharmony_ci if (!fei->regset) 2308c2ecf20Sopenharmony_ci return; 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_ci fei->regset->regs = fei_sys_regs; 2338c2ecf20Sopenharmony_ci fei->regset->nregs = ARRAY_SIZE(fei_sys_regs); 2348c2ecf20Sopenharmony_ci fei->regset->base = fei->io; 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_ci fei->root = debugfs_create_dir("c8sectpfe", NULL); 2378c2ecf20Sopenharmony_ci debugfs_create_regset32("registers", S_IRUGO, fei->root, fei->regset); 2388c2ecf20Sopenharmony_ci} 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_civoid c8sectpfe_debugfs_exit(struct c8sectpfei *fei) 2418c2ecf20Sopenharmony_ci{ 2428c2ecf20Sopenharmony_ci debugfs_remove_recursive(fei->root); 2438c2ecf20Sopenharmony_ci fei->root = NULL; 2448c2ecf20Sopenharmony_ci} 245