c8sectpfe-debugfs.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * c8sectpfe-debugfs.c - C8SECTPFE STi DVB driver
  4. *
  5. * Copyright (c) STMicroelectronics 2015
  6. *
  7. * Author: Peter Griffin <peter.griffin@linaro.org>
  8. *
  9. */
  10. #include <linux/debugfs.h>
  11. #include <linux/device.h>
  12. #include <linux/interrupt.h>
  13. #include <linux/io.h>
  14. #include <linux/kernel.h>
  15. #include <linux/seq_file.h>
  16. #include <linux/slab.h>
  17. #include <linux/types.h>
  18. #include "c8sectpfe-debugfs.h"
  19. #define dump_register(nm ...) \
  20. { \
  21. .name = #nm, \
  22. .offset = nm, \
  23. }
  24. static const struct debugfs_reg32 fei_sys_regs[] = {
  25. dump_register(SYS_INPUT_ERR_STATUS),
  26. dump_register(SYS_OTHER_ERR_STATUS),
  27. dump_register(SYS_INPUT_ERR_MASK),
  28. dump_register(SYS_DMA_ROUTE),
  29. dump_register(SYS_INPUT_CLKEN),
  30. dump_register(IBENABLE_MASK),
  31. dump_register(SYS_OTHER_CLKEN),
  32. dump_register(SYS_CFG_NUM_IB),
  33. dump_register(SYS_CFG_NUM_MIB),
  34. dump_register(SYS_CFG_NUM_SWTS),
  35. dump_register(SYS_CFG_NUM_TSOUT),
  36. dump_register(SYS_CFG_NUM_CCSC),
  37. dump_register(SYS_CFG_NUM_RAM),
  38. dump_register(SYS_CFG_NUM_TP),
  39. dump_register(C8SECTPFE_IB_IP_FMT_CFG(0)),
  40. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(0)),
  41. dump_register(C8SECTPFE_IB_PID_SET(0)),
  42. dump_register(C8SECTPFE_IB_PKT_LEN(0)),
  43. dump_register(C8SECTPFE_IB_BUFF_STRT(0)),
  44. dump_register(C8SECTPFE_IB_BUFF_END(0)),
  45. dump_register(C8SECTPFE_IB_READ_PNT(0)),
  46. dump_register(C8SECTPFE_IB_WRT_PNT(0)),
  47. dump_register(C8SECTPFE_IB_PRI_THRLD(0)),
  48. dump_register(C8SECTPFE_IB_STAT(0)),
  49. dump_register(C8SECTPFE_IB_MASK(0)),
  50. dump_register(C8SECTPFE_IB_SYS(0)),
  51. dump_register(C8SECTPFE_IB_IP_FMT_CFG(1)),
  52. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(1)),
  53. dump_register(C8SECTPFE_IB_PID_SET(1)),
  54. dump_register(C8SECTPFE_IB_PKT_LEN(1)),
  55. dump_register(C8SECTPFE_IB_BUFF_STRT(1)),
  56. dump_register(C8SECTPFE_IB_BUFF_END(1)),
  57. dump_register(C8SECTPFE_IB_READ_PNT(1)),
  58. dump_register(C8SECTPFE_IB_WRT_PNT(1)),
  59. dump_register(C8SECTPFE_IB_PRI_THRLD(1)),
  60. dump_register(C8SECTPFE_IB_STAT(1)),
  61. dump_register(C8SECTPFE_IB_MASK(1)),
  62. dump_register(C8SECTPFE_IB_SYS(1)),
  63. dump_register(C8SECTPFE_IB_IP_FMT_CFG(2)),
  64. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(2)),
  65. dump_register(C8SECTPFE_IB_PID_SET(2)),
  66. dump_register(C8SECTPFE_IB_PKT_LEN(2)),
  67. dump_register(C8SECTPFE_IB_BUFF_STRT(2)),
  68. dump_register(C8SECTPFE_IB_BUFF_END(2)),
  69. dump_register(C8SECTPFE_IB_READ_PNT(2)),
  70. dump_register(C8SECTPFE_IB_WRT_PNT(2)),
  71. dump_register(C8SECTPFE_IB_PRI_THRLD(2)),
  72. dump_register(C8SECTPFE_IB_STAT(2)),
  73. dump_register(C8SECTPFE_IB_MASK(2)),
  74. dump_register(C8SECTPFE_IB_SYS(2)),
  75. dump_register(C8SECTPFE_IB_IP_FMT_CFG(3)),
  76. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(3)),
  77. dump_register(C8SECTPFE_IB_PID_SET(3)),
  78. dump_register(C8SECTPFE_IB_PKT_LEN(3)),
  79. dump_register(C8SECTPFE_IB_BUFF_STRT(3)),
  80. dump_register(C8SECTPFE_IB_BUFF_END(3)),
  81. dump_register(C8SECTPFE_IB_READ_PNT(3)),
  82. dump_register(C8SECTPFE_IB_WRT_PNT(3)),
  83. dump_register(C8SECTPFE_IB_PRI_THRLD(3)),
  84. dump_register(C8SECTPFE_IB_STAT(3)),
  85. dump_register(C8SECTPFE_IB_MASK(3)),
  86. dump_register(C8SECTPFE_IB_SYS(3)),
  87. dump_register(C8SECTPFE_IB_IP_FMT_CFG(4)),
  88. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(4)),
  89. dump_register(C8SECTPFE_IB_PID_SET(4)),
  90. dump_register(C8SECTPFE_IB_PKT_LEN(4)),
  91. dump_register(C8SECTPFE_IB_BUFF_STRT(4)),
  92. dump_register(C8SECTPFE_IB_BUFF_END(4)),
  93. dump_register(C8SECTPFE_IB_READ_PNT(4)),
  94. dump_register(C8SECTPFE_IB_WRT_PNT(4)),
  95. dump_register(C8SECTPFE_IB_PRI_THRLD(4)),
  96. dump_register(C8SECTPFE_IB_STAT(4)),
  97. dump_register(C8SECTPFE_IB_MASK(4)),
  98. dump_register(C8SECTPFE_IB_SYS(4)),
  99. dump_register(C8SECTPFE_IB_IP_FMT_CFG(5)),
  100. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(5)),
  101. dump_register(C8SECTPFE_IB_PID_SET(5)),
  102. dump_register(C8SECTPFE_IB_PKT_LEN(5)),
  103. dump_register(C8SECTPFE_IB_BUFF_STRT(5)),
  104. dump_register(C8SECTPFE_IB_BUFF_END(5)),
  105. dump_register(C8SECTPFE_IB_READ_PNT(5)),
  106. dump_register(C8SECTPFE_IB_WRT_PNT(5)),
  107. dump_register(C8SECTPFE_IB_PRI_THRLD(5)),
  108. dump_register(C8SECTPFE_IB_STAT(5)),
  109. dump_register(C8SECTPFE_IB_MASK(5)),
  110. dump_register(C8SECTPFE_IB_SYS(5)),
  111. dump_register(C8SECTPFE_IB_IP_FMT_CFG(6)),
  112. dump_register(C8SECTPFE_IB_TAGBYTES_CFG(6)),
  113. dump_register(C8SECTPFE_IB_PID_SET(6)),
  114. dump_register(C8SECTPFE_IB_PKT_LEN(6)),
  115. dump_register(C8SECTPFE_IB_BUFF_STRT(6)),
  116. dump_register(C8SECTPFE_IB_BUFF_END(6)),
  117. dump_register(C8SECTPFE_IB_READ_PNT(6)),
  118. dump_register(C8SECTPFE_IB_WRT_PNT(6)),
  119. dump_register(C8SECTPFE_IB_PRI_THRLD(6)),
  120. dump_register(C8SECTPFE_IB_STAT(6)),
  121. dump_register(C8SECTPFE_IB_MASK(6)),
  122. dump_register(C8SECTPFE_IB_SYS(6)),
  123. dump_register(DMA_CPU_ID),
  124. dump_register(DMA_CPU_VCR),
  125. dump_register(DMA_CPU_RUN),
  126. dump_register(DMA_CPU_PC),
  127. dump_register(DMA_PER_TPn_DREQ_MASK),
  128. dump_register(DMA_PER_TPn_DACK_SET),
  129. dump_register(DMA_PER_TPn_DREQ),
  130. dump_register(DMA_PER_TPn_DACK),
  131. dump_register(DMA_PER_DREQ_MODE),
  132. dump_register(DMA_PER_STBUS_SYNC),
  133. dump_register(DMA_PER_STBUS_ACCESS),
  134. dump_register(DMA_PER_STBUS_ADDRESS),
  135. dump_register(DMA_PER_IDLE_INT),
  136. dump_register(DMA_PER_PRIORITY),
  137. dump_register(DMA_PER_MAX_OPCODE),
  138. dump_register(DMA_PER_MAX_CHUNK),
  139. dump_register(DMA_PER_PAGE_SIZE),
  140. dump_register(DMA_PER_MBOX_STATUS),
  141. dump_register(DMA_PER_MBOX_SET),
  142. dump_register(DMA_PER_MBOX_CLEAR),
  143. dump_register(DMA_PER_MBOX_MASK),
  144. dump_register(DMA_PER_INJECT_PKT_SRC),
  145. dump_register(DMA_PER_INJECT_PKT_DEST),
  146. dump_register(DMA_PER_INJECT_PKT_ADDR),
  147. dump_register(DMA_PER_INJECT_PKT),
  148. dump_register(DMA_PER_PAT_PTR_INIT),
  149. dump_register(DMA_PER_PAT_PTR),
  150. dump_register(DMA_PER_SLEEP_MASK),
  151. dump_register(DMA_PER_SLEEP_COUNTER),
  152. dump_register(DMA_FIRMWARE_VERSION),
  153. dump_register(DMA_PTRREC_BASE),
  154. dump_register(DMA_PTRREC_INPUT_OFFSET),
  155. dump_register(DMA_ERRREC_BASE),
  156. dump_register(DMA_ERROR_RECORD(0)),
  157. dump_register(DMA_ERROR_RECORD(1)),
  158. dump_register(DMA_ERROR_RECORD(2)),
  159. dump_register(DMA_ERROR_RECORD(3)),
  160. dump_register(DMA_ERROR_RECORD(4)),
  161. dump_register(DMA_ERROR_RECORD(5)),
  162. dump_register(DMA_ERROR_RECORD(6)),
  163. dump_register(DMA_ERROR_RECORD(7)),
  164. dump_register(DMA_ERROR_RECORD(8)),
  165. dump_register(DMA_ERROR_RECORD(9)),
  166. dump_register(DMA_ERROR_RECORD(10)),
  167. dump_register(DMA_ERROR_RECORD(11)),
  168. dump_register(DMA_ERROR_RECORD(12)),
  169. dump_register(DMA_ERROR_RECORD(13)),
  170. dump_register(DMA_ERROR_RECORD(14)),
  171. dump_register(DMA_ERROR_RECORD(15)),
  172. dump_register(DMA_ERROR_RECORD(16)),
  173. dump_register(DMA_ERROR_RECORD(17)),
  174. dump_register(DMA_ERROR_RECORD(18)),
  175. dump_register(DMA_ERROR_RECORD(19)),
  176. dump_register(DMA_ERROR_RECORD(20)),
  177. dump_register(DMA_ERROR_RECORD(21)),
  178. dump_register(DMA_ERROR_RECORD(22)),
  179. dump_register(DMA_IDLE_REQ),
  180. dump_register(DMA_FIRMWARE_CONFIG),
  181. dump_register(PIDF_BASE(0)),
  182. dump_register(PIDF_BASE(1)),
  183. dump_register(PIDF_BASE(2)),
  184. dump_register(PIDF_BASE(3)),
  185. dump_register(PIDF_BASE(4)),
  186. dump_register(PIDF_BASE(5)),
  187. dump_register(PIDF_BASE(6)),
  188. dump_register(PIDF_BASE(7)),
  189. dump_register(PIDF_BASE(8)),
  190. dump_register(PIDF_BASE(9)),
  191. dump_register(PIDF_BASE(10)),
  192. dump_register(PIDF_BASE(11)),
  193. dump_register(PIDF_BASE(12)),
  194. dump_register(PIDF_BASE(13)),
  195. dump_register(PIDF_BASE(14)),
  196. dump_register(PIDF_BASE(15)),
  197. dump_register(PIDF_BASE(16)),
  198. dump_register(PIDF_BASE(17)),
  199. dump_register(PIDF_BASE(18)),
  200. dump_register(PIDF_BASE(19)),
  201. dump_register(PIDF_BASE(20)),
  202. dump_register(PIDF_BASE(21)),
  203. dump_register(PIDF_BASE(22)),
  204. dump_register(PIDF_LEAK_ENABLE),
  205. dump_register(PIDF_LEAK_STATUS),
  206. dump_register(PIDF_LEAK_COUNT_RESET),
  207. dump_register(PIDF_LEAK_COUNTER),
  208. };
  209. void c8sectpfe_debugfs_init(struct c8sectpfei *fei)
  210. {
  211. struct dentry *root;
  212. struct dentry *file;
  213. root = debugfs_create_dir("c8sectpfe", NULL);
  214. if (!root)
  215. goto err;
  216. fei->root = root;
  217. fei->regset = devm_kzalloc(fei->dev, sizeof(*fei->regset), GFP_KERNEL);
  218. if (!fei->regset)
  219. goto err;
  220. fei->regset->regs = fei_sys_regs;
  221. fei->regset->nregs = ARRAY_SIZE(fei_sys_regs);
  222. fei->regset->base = fei->io;
  223. file = debugfs_create_regset32("registers", S_IRUGO, root,
  224. fei->regset);
  225. if (!file) {
  226. dev_err(fei->dev,
  227. "%s not able to create 'registers' debugfs\n"
  228. , __func__);
  229. goto err;
  230. }
  231. return;
  232. err:
  233. debugfs_remove_recursive(root);
  234. }
  235. void c8sectpfe_debugfs_exit(struct c8sectpfei *fei)
  236. {
  237. debugfs_remove_recursive(fei->root);
  238. fei->root = NULL;
  239. }