ddp_dump.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2015. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #define LOG_TAG "DUMP"
  32. #include <platform/ddp_info.h>
  33. #include <platform/ddp_log.h>
  34. #include <platform/ddp_path.h>
  35. #include <platform/ddp_dump.h>
  36. #include <platform/disp_drv_platform.h>
  37. #include "platform/ddp_reg.h"
  38. #include <platform/ddp_dsi.h>
  39. #include <platform/ddp_rdma.h>
  40. #include <platform/ddp_ovl.h>
  41. static char *ddp_signal_0(int bit)
  42. {
  43. switch (bit) {
  44. case 31:
  45. return "OVL0_MOUT1-WDMA0_SEL1";
  46. case 30:
  47. return "OVL0_MOUT0-COLOR0_SEL0";
  48. case 17:
  49. return "DSI0_SEL-DSI0";
  50. case 16:
  51. return "DITHER_MOUT2-WDMA0_SEL1";
  52. case 15:
  53. return "DITHER_MOUT1-UFOE_SEL1";
  54. case 14:
  55. return "DITHER_MOUT0-RMDA0";
  56. case 13:
  57. return "WDMA0_SEL-WDMA0";
  58. case 12:
  59. return "RDMA0_SOUT2-DBI0_SEL1";
  60. case 11:
  61. return "RDMA0_SOUT2-DSI0_SEL1";
  62. case 10:
  63. return "RDMA0_SOUT1-COLOR0_SEL0";
  64. case 9:
  65. return "RDMA0_SOUT0-UFOE0_SEL0";
  66. case 8:
  67. return "RDMA0-RDMA0_SOUT";
  68. case 7:
  69. return "OVL0-OVL_MOUT";
  70. case 6:
  71. return "GAMMA0-DITHER0";
  72. case 5:
  73. return "DITHER0-DITHER0_MOUT";
  74. case 4:
  75. return "COLOR0-CCORR0";
  76. case 3:
  77. return "CCORR0_AAL0";
  78. case 2:
  79. return "AAL0-GAMMA0";
  80. case 1:
  81. return "DBI0_SEL-DBI0";
  82. case 0:
  83. return "COLOR0_SEL-COLOR0";
  84. default:
  85. return NULL;
  86. }
  87. }
  88. static char *ddp_signal_1(int bit)
  89. {
  90. switch (bit) {
  91. case 12:
  92. return "UFOE_MOUT0-DSI0_SEL0";
  93. case 13:
  94. return "UFOE_MOUT1-DBI0_SEL0";
  95. case 14:
  96. return "UFOE_MOUT2-WDMA0_SEL2";
  97. case 15:
  98. return "UFOE_SEL-UFOE_MOUT";
  99. default:
  100. return NULL;
  101. }
  102. }
  103. static char *ddp_greq_name(int bit)
  104. {
  105. switch (bit) {
  106. case 0:
  107. return "OVL0";
  108. case 1:
  109. return "RDMA0";
  110. case 2:
  111. return "WDMA0";
  112. case 3:
  113. return "MDP_RDMA0";
  114. case 4:
  115. return "MDP_WDMA";
  116. case 5:
  117. return "MDP_WROT0";
  118. case 6:
  119. return "FAKE";
  120. default:
  121. return NULL;
  122. }
  123. }
  124. static char *ddp_get_mutex_module0_name(unsigned int bit)
  125. {
  126. switch (bit) {
  127. case 0: return "MDP_RDMA0";
  128. case 1: return "MDP_RSZ0";
  129. case 2: return "MDP_RSZ1";
  130. case 3: return "MDP_WDMA0";
  131. case 4: return "MDP_WROT0";
  132. case 5: return "MDP_TDSHP";
  133. case 6: return "DISP_OVL0";
  134. case 7: return "DISP_RDMA0";
  135. case 8: return "DISP_WDMA0";
  136. case 9: return "DISP_COLOR0";
  137. case 10: return "DISP_CCORR0";
  138. case 11: return "DISP_AAL0";
  139. case 12: return "DISP_GAMMA0";
  140. case 13: return "DISP_DITHER0";
  141. case 14: return "DISP_DSI0";
  142. case 15: return "DISP_DBI0";
  143. case 16: return "DISP_PWM0";
  144. default: return "mutex-unknown";
  145. }
  146. }
  147. char *ddp_get_fmt_name(DISP_MODULE_ENUM module, unsigned int fmt)
  148. {
  149. if (module == DISP_MODULE_WDMA0) {
  150. switch (fmt) {
  151. case 0:
  152. return "rgb565";
  153. case 1:
  154. return "rgb888";
  155. case 2:
  156. return "rgba8888";
  157. case 3:
  158. return "argb8888";
  159. case 4:
  160. return "uyvy";
  161. case 5:
  162. return "yuy2";
  163. case 7:
  164. return "y-only";
  165. case 8:
  166. return "iyuv";
  167. case 12:
  168. return "nv12";
  169. default:
  170. DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
  171. return "unknown";
  172. }
  173. } else if (module == DISP_MODULE_OVL0) {
  174. switch (fmt) {
  175. case 0:
  176. return "rgb565";
  177. case 1:
  178. return "rgb888";
  179. case 2:
  180. return "rgba8888";
  181. case 3:
  182. return "argb8888";
  183. case 4:
  184. return "uyvy";
  185. case 5:
  186. return "yuyv";
  187. default:
  188. DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
  189. return "unknown";
  190. }
  191. } else if (module == DISP_MODULE_RDMA0 || module == DISP_MODULE_RDMA1 || module == DISP_MODULE_RDMA2) {
  192. switch (fmt) {
  193. case 0:
  194. return "rgb565";
  195. case 1:
  196. return "rgb888";
  197. case 2:
  198. return "rgba8888";
  199. case 3:
  200. return "argb8888";
  201. case 4:
  202. return "uyvy";
  203. case 5:
  204. return "yuyv";
  205. default:
  206. DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
  207. return "unknown";
  208. }
  209. } else {
  210. DDPDUMP("ddp_get_fmt_name, unknown module=%d\n", module);
  211. }
  212. return "unknown";
  213. }
  214. static char *ddp_clock_0(int bit)
  215. {
  216. switch (bit) {
  217. case 0:
  218. return "SMI_COMMON";
  219. case 1:
  220. return "SMI_LARB0";
  221. case 2:
  222. return "GALS_COMM0";
  223. case 3:
  224. return "GALS_COMM1";
  225. case 4:
  226. return "ISP_DL";
  227. case 5:
  228. return "MDP_RDMA0";
  229. case 6:
  230. return "MDP_RSZ0";
  231. case 7:
  232. return "MDP_RSZ1";
  233. case 8:
  234. return "MDP_TDSHP";
  235. case 9:
  236. return "MDP_WROT0";
  237. case 10:
  238. return "MDP_WDMA0";
  239. case 11:
  240. return "FAKE_ENG";
  241. case 12:
  242. return "DISP_OVL0";
  243. case 13:
  244. return "DISP_RDMA0";
  245. case 14:
  246. return "DISP_WDMA0";
  247. case 15:
  248. return "DISP_COLOR0";
  249. case 16:
  250. return "DISP_CCORR0";
  251. case 17:
  252. return "DISP_AAL0";
  253. case 18:
  254. return "DISP_GAMMA0";
  255. case 19:
  256. return "DISP_DITHER0";
  257. case 20:
  258. return "DSI0_MM_clock";
  259. case 21:
  260. return "DSI0_interface_clock";
  261. case 22:
  262. return "DBI0_MM_clock";
  263. case 23:
  264. return "DBI0_interface_clock";
  265. case 24:
  266. return "F26M_HRT_clock";
  267. default:
  268. return NULL;
  269. }
  270. }
  271. static void mutex_dump_reg(void)
  272. {
  273. DDPDUMP("==DISP MUTEX REGS==\n");
  274. DDPDUMP("(0x000)M_INTEN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTEN));
  275. DDPDUMP("(0x004)M_INTSTA =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTSTA));
  276. DDPDUMP("(0x020)M0_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_EN));
  277. DDPDUMP("(0x028)M0_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_RST));
  278. DDPDUMP("(0x02c)M0_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_SOF));
  279. DDPDUMP("(0x030)M0_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_MOD0));
  280. DDPDUMP("(0x040)M1_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_EN));
  281. DDPDUMP("(0x048)M1_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_RST));
  282. DDPDUMP("(0x04c)M1_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_SOF));
  283. DDPDUMP("(0x050)M1_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_MOD0));
  284. DDPDUMP("(0x060)M2_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_EN));
  285. DDPDUMP("(0x068)M2_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_RST));
  286. DDPDUMP("(0x06c)M2_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_SOF));
  287. DDPDUMP("(0x070)M2_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_MOD0));
  288. DDPDUMP("(0x080)M3_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_EN));
  289. DDPDUMP("(0x088)M3_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_RST));
  290. DDPDUMP("(0x08C)M3_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_SOF));
  291. DDPDUMP("(0x090)M3_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_MOD0));
  292. DDPDUMP("(0x0a0)M4_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_EN));
  293. DDPDUMP("(0x0a8)M4_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_RST));
  294. DDPDUMP("(0x0ac)M4_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_SOF));
  295. DDPDUMP("(0x0b0)M4_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_MOD0));
  296. DDPDUMP("(0x0c0)M5_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_EN));
  297. DDPDUMP("(0x0c8)M5_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_RST));
  298. DDPDUMP("(0x0cc)M5_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_SOF));
  299. DDPDUMP("(0x0d0)M5_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_MOD0));
  300. DDPDUMP("(0x30c)DEBUG_OUT_SEL =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DEBUG_OUT_SEL));
  301. return;
  302. }
  303. static void mutex_dump_analysis(void)
  304. {
  305. int i = 0;
  306. int j = 0;
  307. char mutex_module[512] = { '\0' };
  308. char *p = NULL;
  309. int len = 0;
  310. unsigned int val;
  311. DDPDUMP("== DISP Mutex Analysis ==\n");
  312. for (i = 0; i < 5; i++) {
  313. p = mutex_module;
  314. len = 0;
  315. if (DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD0(i)) == 0)
  316. continue;
  317. val = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_SOF(i));
  318. len = sprintf(p, "MUTEX%d :SOF=%s,EOF=%s,WAIT=%d,module=(",
  319. i,
  320. ddp_get_mutex_sof_name(REG_FLD_VAL_GET(SOF_FLD_MUTEX0_SOF, val)),
  321. ddp_get_mutex_sof_name(REG_FLD_VAL_GET(SOF_FLD_MUTEX0_EOF, val)),
  322. REG_FLD_VAL_GET(SOF_FLD_MUTEX0_SOF_WAIT, val));
  323. p += len;
  324. for (j = 0; j < 32; j++) {
  325. unsigned int regval = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD0(i));
  326. if ((regval & (1 << j))) {
  327. len = sprintf(p, "%s,", ddp_get_mutex_module0_name(j));
  328. p += len;
  329. }
  330. }
  331. /* for (j = 0; j < 32; j++) {
  332. unsigned int regval = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD1(i));
  333. if ((regval & (1 << j))) {
  334. len = sprintf(p, "%s,", ddp_get_mutex_module1_name(j));
  335. p += len;
  336. }
  337. }
  338. */
  339. DDPDUMP("%s)\n", mutex_module);
  340. }
  341. }
  342. static void mmsys_config_dump_reg(void)
  343. {
  344. DDPDUMP("== DISP MMSYS_Config REGS ==\n");
  345. DDPDUMP("MMSYS_INTEN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTEN));
  346. DDPDUMP("MMSYS_INTSTA=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTSTA));
  347. DDPDUMP("MMSYS_MOUT_RST=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MOUT_RST));
  348. DDPDUMP("OVL0_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL0_MOUT_EN));
  349. DDPDUMP("DITHER_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DITHER_MOUT_EN));
  350. DDPDUMP("UFOE_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_UFOE_MOUT_EN));
  351. DDPDUMP("RDMA0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RDMA0_SOUT_SEL_IN));
  352. DDPDUMP("COLOR_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_COLOR_SEL_IN));
  353. DDPDUMP("DBI_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DBI_SEL_IN));
  354. DDPDUMP("WDMA0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_WDMA0_SEL_IN));
  355. DDPDUMP("DSI0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DSI0_SEL_IN));
  356. DDPDUMP("UFOE_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_UFOE_SEL_IN));
  357. DDPDUMP("MM_MISC=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MISC));
  358. DDPDUMP("MM_CG_CON0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0));
  359. DDPDUMP("MM_CG_CON1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
  360. DDPDUMP("MM_HW_DCM_DIS0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_1ST_DIS0));
  361. DDPDUMP("MM_HW_DCM_DIS1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_2ST_DIS0));
  362. DDPDUMP("MM_SW0_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW0_RST_B));
  363. DDPDUMP("MM_SW1_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW1_RST_B));
  364. DDPDUMP("MM_LCM_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_LCM_RST_B));
  365. DDPDUMP("MM_DBG_OUT_SEL=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DEBUG_OUT_SEL));
  366. DDPDUMP("MM_DUMMY0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY0));
  367. DDPDUMP("MM_DUMMY1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY1));
  368. DDPDUMP("MM_DUMMY2=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY2));
  369. DDPDUMP("MM_DUMMY3=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY3));
  370. DDPDUMP("DISP_VALID_0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0));
  371. DDPDUMP("DISP_VALID_1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1));
  372. DDPDUMP("DISP_READY_0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0));
  373. DDPDUMP("DISP_READY_1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1));
  374. }
  375. /* ------ clock:
  376. Before power on mmsys:
  377. CLK_CFG_0_CLR (address is 0x10000048) = 0x80000000 (bit 31).
  378. Before using DISP_PWM0 or DISP_PWM1:
  379. CLK_CFG_1_CLR(address is 0x10000058)=0x80 (bit 7).
  380. Before using DPI pixel clock:
  381. CLK_CFG_6_CLR(address is 0x100000A8)=0x80 (bit 7).
  382. Only need to enable the corresponding bits of MMSYS_CG_CON0 and MMSYS_CG_CON1 for the modules:
  383. smi_common, larb0, mdp_crop, fake_eng, mutex_32k, pwm0, pwm1, dsi0, dsi1, dpi.
  384. Other bits could keep 1. Suggest to keep smi_common and larb0 always clock on.
  385. --------valid & ready
  386. example:
  387. ovl0 -> ovl0_mout_ready=1 means engines after ovl_mout are ready for receiving data
  388. ovl0_mout_ready=0 means ovl0_mout can not receive data, maybe ovl0_mout or after engines config error
  389. ovl0 -> ovl0_mout_valid=1 means engines before ovl0_mout is OK,
  390. ovl0_mout_valid=0 means ovl can not transfer data to ovl0_mout, means ovl0 or before engines are not ready.
  391. */
  392. static void mmsys_config_dump_analysis(void)
  393. {
  394. unsigned int i = 0;
  395. unsigned int reg = 0;
  396. char clock_on[512] = { '\0' };
  397. char *pos = NULL;
  398. const char *name;
  399. /* int len = 0; */
  400. unsigned int valid[2], ready[2];
  401. unsigned int greq;
  402. valid[0] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0);
  403. valid[1] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1);
  404. ready[0] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0);
  405. ready[1] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1);
  406. greq = DISP_REG_GET(DISP_REG_CONFIG_SMI_LARB0_GREQ);
  407. DDPDUMP("== DISP MMSYS_CONFIG ANALYSIS ==\n");
  408. #if 0 /* TODO: mmsys clk?? */
  409. DDPDUMP("mmsys clock=0x%x, CG_CON0=0x%x, CG_CON1=0x%x\n",
  410. DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK),
  411. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0),
  412. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
  413. if ((DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK) >> 31) & 0x1)
  414. DDPERR("mmsys clock abnormal!!\n");
  415. #endif
  416. DDPDUMP("MMSYS_CG_CON0: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON0));
  417. DDPDUMP("MMSYS_CG_CON1: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON1));
  418. reg = DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0);
  419. for (i = 0; i < 32; i++) {
  420. if ((reg & (1 << i)) == 0) {
  421. name = ddp_clock_0(i);
  422. if (name)
  423. strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
  424. }
  425. }
  426. DDPDUMP("clock on modules:%s\n", clock_on);
  427. DDPDUMP("valid0=0x%x,valid1=0x%x,ready0=0x%x,ready1=0x%x,greq=0%x\n",
  428. valid[0], valid[1], ready[0], ready[1], greq);
  429. for (i = 0; i < 32; i++) {
  430. name = ddp_signal_0(i);
  431. if (!name)
  432. continue;
  433. pos = clock_on;
  434. if ((valid[0] & (1 << i)))
  435. pos += snprintf(pos, sizeof(clock_on), "%s,", "v");
  436. else
  437. pos += snprintf(pos, sizeof(clock_on), "%s,", "n");
  438. if ((ready[0] & (1 << i)))
  439. pos += snprintf(pos, sizeof(clock_on), "%s", "r");
  440. else
  441. pos += snprintf(pos, sizeof(clock_on), "%s", "n");
  442. pos += snprintf(pos, sizeof(clock_on), ": %s", name);
  443. DDPDUMP("%s\n", clock_on);
  444. }
  445. for (i = 0; i < 32; i++) {
  446. name = ddp_signal_1(i);
  447. if (!name)
  448. continue;
  449. pos = clock_on;
  450. if ((valid[1] & (1 << i)))
  451. pos += snprintf(pos, sizeof(clock_on), "%s,", "v");
  452. else
  453. pos += snprintf(pos, sizeof(clock_on), "%s,", "n");
  454. if ((ready[1] & (1 << i)))
  455. pos += snprintf(pos, sizeof(clock_on), "%s", "r");
  456. else
  457. pos += snprintf(pos, sizeof(clock_on), "%s", "n");
  458. pos += snprintf(pos, sizeof(clock_on), ": %s", name);
  459. DDPDUMP("%s\n", clock_on);
  460. }
  461. /* greq: 1 means SMI dose not grant, maybe SMI hang */
  462. if (greq)
  463. DDPDUMP("smi greq not grant module: (greq: 1 means SMI dose not grant, maybe SMI hang)");
  464. clock_on[0] = '\0';
  465. for (i = 0; i < 32; i++) {
  466. if (greq & (1 << i)) {
  467. name = ddp_greq_name(i);
  468. if (!name)
  469. continue;
  470. strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
  471. }
  472. }
  473. DDPDUMP("%s\n", clock_on);
  474. }
  475. static void gamma_dump_reg(void)
  476. {
  477. DDPDUMP("== DISP GAMMA REGS ==\n");
  478. DDPDUMP("(0x000)GA_EN=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_EN));
  479. DDPDUMP("(0x004)GA_RESET=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_RESET));
  480. DDPDUMP("(0x008)GA_INTEN=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTEN));
  481. DDPDUMP("(0x00c)GA_INTSTA=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTSTA));
  482. DDPDUMP("(0x010)GA_STATUS=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_STATUS));
  483. DDPDUMP("(0x020)GA_CFG=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CFG));
  484. DDPDUMP("(0x024)GA_IN_COUNT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT));
  485. DDPDUMP("(0x028)GA_OUT_COUNT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT));
  486. DDPDUMP("(0x02c)GA_CHKSUM=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CHKSUM));
  487. DDPDUMP("(0x030)GA_SIZE=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_SIZE));
  488. DDPDUMP("(0x0c0)GA_DUMMY_REG=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_DUMMY_REG));
  489. DDPDUMP("(0x800)GA_LUT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_LUT));
  490. }
  491. static void gamma_dump_analysis(void)
  492. {
  493. DDPDUMP("== DISP GAMMA ANALYSIS ==\n");
  494. DDPDUMP("gamma: en=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  495. DISP_REG_GET(DISP_REG_GAMMA_EN),
  496. (DISP_REG_GET(DISP_REG_GAMMA_SIZE) >> 16) & 0x1fff,
  497. DISP_REG_GET(DISP_REG_GAMMA_SIZE) & 0x1fff,
  498. DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT) & 0x1fff,
  499. (DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT) >> 16) & 0x1fff,
  500. DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT) & 0x1fff,
  501. (DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT) >> 16) & 0x1fff);
  502. }
  503. static void color_dump_reg(DISP_MODULE_ENUM module)
  504. {
  505. int index = 0;
  506. if (DISP_MODULE_COLOR0 == module) {
  507. index = 0;
  508. } else if (DISP_MODULE_COLOR1 == module) {
  509. DDPDUMP("error: DISP COLOR%d dose not exist!\n", index);
  510. return;
  511. }
  512. DDPDUMP("== DISP COLOR%d REGS ==\n", index);
  513. DDPDUMP("(0x400)COLOR_CFG_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_CFG_MAIN));
  514. DDPDUMP("(0x404)COLOR_PXL_CNT_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN));
  515. DDPDUMP("(0x408)COLOR_LINE_CNT_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN));
  516. DDPDUMP("(0xc00)COLOR_START=0x%x\n", DISP_REG_GET(DISP_COLOR_START));
  517. DDPDUMP("(0xc28)DISP_COLOR_CK_ON=0x%x\n", DISP_REG_GET(DISP_COLOR_CK_ON));
  518. DDPDUMP("(0xc50)COLOR_INTER_IP_W=0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH));
  519. DDPDUMP("(0xc54)COLOR_INTER_IP_H=0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT));
  520. return;
  521. }
  522. static void color_dump_analysis(DISP_MODULE_ENUM module)
  523. {
  524. int index = 0;
  525. if (DISP_MODULE_COLOR0 == module) {
  526. index = 0;
  527. } else if (DISP_MODULE_COLOR1 == module) {
  528. DDPDUMP("error: DISP COLOR%d dose not exist!\n", index);
  529. return;
  530. }
  531. DDPDUMP("== DISP COLOR%d ANALYSIS ==\n", index);
  532. DDPDUMP("color%d: bypass=%d, w=%d, h=%d, pixel_cnt=%d, line_cnt=%d,\n",
  533. index,
  534. (DISP_REG_GET(DISP_COLOR_CFG_MAIN) >> 7) & 0x1,
  535. DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH),
  536. DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT),
  537. DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN) & 0xffff,
  538. (DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN) >> 16) & 0x1fff);
  539. return;
  540. }
  541. static void aal_dump_reg(void)
  542. {
  543. DDPDUMP("== DISP AAL REGS ==\n");
  544. DDPDUMP("(0x000)AAL_EN=0x%x\n", DISP_REG_GET(DISP_AAL_EN));
  545. DDPDUMP("(0x008)AAL_INTEN=0x%x\n", DISP_REG_GET(DISP_AAL_INTEN));
  546. DDPDUMP("(0x00c)AAL_INTSTA=0x%x\n", DISP_REG_GET(DISP_AAL_INTSTA));
  547. DDPDUMP("(0x020)AAL_CFG=0x%x\n", DISP_REG_GET(DISP_AAL_CFG));
  548. DDPDUMP("(0x024)AAL_IN_CNT=0x%x\n", DISP_REG_GET(DISP_AAL_IN_CNT));
  549. DDPDUMP("(0x028)AAL_OUT_CNT=0x%x\n", DISP_REG_GET(DISP_AAL_OUT_CNT));
  550. DDPDUMP("(0x030)AAL_SIZE=0x%x\n", DISP_REG_GET(DISP_AAL_SIZE));
  551. DDPDUMP("(0x20c)AAL_CABC_00=0x%x\n", DISP_REG_GET(DISP_AAL_CABC_00));
  552. DDPDUMP("(0x214)AAL_CABC_02=0x%x\n", DISP_REG_GET(DISP_AAL_CABC_02));
  553. DDPDUMP("(0x20c)AAL_STATUS_00=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00));
  554. DDPDUMP("(0x210)AAL_STATUS_01=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00 + 0x4));
  555. DDPDUMP("(0x2a0)AAL_STATUS_31=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32 - 0x4));
  556. DDPDUMP("(0x2a4)AAL_STATUS_32=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32));
  557. DDPDUMP("(0x3b0)AAL_DRE_MAPPING_00=0x%x\n", DISP_REG_GET(DISP_AAL_DRE_MAPPING_00));
  558. return;
  559. }
  560. static void aal_dump_analysis(void)
  561. {
  562. DDPDUMP("== DISP AAL ANALYSIS ==\n");
  563. DDPDUMP("aal: bypass=%d, relay=%d, en=%d, w=%d, h=%d, in(%d,%d),out(%d,%d)\n",
  564. DISP_REG_GET(DISP_AAL_EN) == 0x0,
  565. DISP_REG_GET(DISP_AAL_CFG) & 0x01,
  566. DISP_REG_GET(DISP_AAL_EN),
  567. (DISP_REG_GET(DISP_AAL_SIZE) >> 16) & 0x1fff,
  568. DISP_REG_GET(DISP_AAL_SIZE) & 0x1fff,
  569. DISP_REG_GET(DISP_AAL_IN_CNT) & 0x1fff,
  570. (DISP_REG_GET(DISP_AAL_IN_CNT) >> 16) & 0x1fff,
  571. DISP_REG_GET(DISP_AAL_OUT_CNT) & 0x1fff,
  572. (DISP_REG_GET(DISP_AAL_OUT_CNT) >> 16) & 0x1fff);
  573. }
  574. static void pwm_dump_reg(DISP_MODULE_ENUM module)
  575. {
  576. int index = 0;
  577. unsigned long reg_base = 0;
  578. if (module == DISP_MODULE_PWM0) {
  579. index = 0;
  580. reg_base = DISPSYS_PWM0_BASE;
  581. } else {
  582. index = 1;
  583. reg_base = DISPSYS_PWM0_BASE;
  584. }
  585. DDPDUMP("== DISP PWM%d REGS ==\n", index);
  586. DDPDUMP("(0x000)PWM_EN=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_EN_OFF));
  587. DDPDUMP("(0x008)PWM_CON_0=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_0_OFF));
  588. DDPDUMP("(0x010)PWM_CON_1=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_1_OFF));
  589. DDPDUMP("(0x028)PWM_DEBUG=0x%x\n", DISP_REG_GET(reg_base + 0x28));
  590. return;
  591. }
  592. static void pwm_dump_analysis(DISP_MODULE_ENUM module)
  593. {
  594. int index = 0;
  595. if (module == DISP_MODULE_PWM0) {
  596. index = 0;
  597. } else {
  598. index = 1;
  599. }
  600. DDPDUMP("== DISP PWM%d ANALYSIS ==\n", index);
  601. #if 0 /* TODO: clk reg?? */
  602. DDPDUMP("pwm clock=%d\n", (DISP_REG_GET(DISP_REG_CLK_CFG_1_CLR) >> 7) & 0x1);
  603. #endif
  604. return;
  605. }
  606. static void ccorr_dump_reg(void)
  607. {
  608. DDPDUMP("== DISP CCORR REGS ==\n");
  609. DDPDUMP("(00)EN=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_EN));
  610. DDPDUMP("(20)CFG=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_CFG));
  611. DDPDUMP("(24)IN_CNT=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_IN_CNT));
  612. DDPDUMP("(28)OUT_CNT=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_OUT_CNT));
  613. DDPDUMP("(30)SIZE=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_SIZE));
  614. }
  615. static void ccorr_dump_analyze(void)
  616. {
  617. DDPDUMP("ccorr: en=%d, config=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  618. DISP_REG_GET(DISP_REG_CCORR_EN), DISP_REG_GET(DISP_REG_CCORR_CFG),
  619. (DISP_REG_GET(DISP_REG_CCORR_SIZE) >> 16) & 0x1fff,
  620. DISP_REG_GET(DISP_REG_CCORR_SIZE) & 0x1fff,
  621. DISP_REG_GET(DISP_REG_CCORR_IN_CNT) & 0x1fff,
  622. (DISP_REG_GET(DISP_REG_CCORR_IN_CNT) >> 16) & 0x1fff,
  623. DISP_REG_GET(DISP_REG_CCORR_IN_CNT) & 0x1fff,
  624. (DISP_REG_GET(DISP_REG_CCORR_IN_CNT) >> 16) & 0x1fff);
  625. }
  626. static void dither_dump_reg(void)
  627. {
  628. DDPDUMP("== DISP DITHER REGS ==\n");
  629. DDPDUMP("(00)EN=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_EN));
  630. DDPDUMP("(20)CFG=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_CFG));
  631. DDPDUMP("(24)IN_CNT=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_IN_CNT));
  632. DDPDUMP("(28)OUT_CNT=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_OUT_CNT));
  633. DDPDUMP("(30)SIZE=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_SIZE));
  634. }
  635. static void dither_dump_analyze(void)
  636. {
  637. DDPDUMP("dither: en=%d, config=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  638. DISP_REG_GET(DISPSYS_DITHER0_BASE + 0x000), DISP_REG_GET(DISPSYS_DITHER0_BASE + 0x020),
  639. (DISP_REG_GET(DISP_REG_DITHER_SIZE) >> 16) & 0x1fff,
  640. DISP_REG_GET(DISP_REG_DITHER_SIZE) & 0x1fff,
  641. DISP_REG_GET(DISP_REG_DITHER_IN_CNT) & 0x1fff,
  642. (DISP_REG_GET(DISP_REG_DITHER_IN_CNT) >> 16) & 0x1fff,
  643. DISP_REG_GET(DISP_REG_DITHER_OUT_CNT) & 0x1fff,
  644. (DISP_REG_GET(DISP_REG_DITHER_OUT_CNT) >> 16) & 0x1fff);
  645. }
  646. static void dsi_dump_reg(DISP_MODULE_ENUM module)
  647. {
  648. DSI_DumpRegisters(module, NULL, 1);
  649. #if 0
  650. if (DISP_MODULE_DSI0) {
  651. int i = 0;
  652. DDPDUMP("== DISP DSI0 REGS ==\n");
  653. for (i = 0; i < 25 * 16; i += 16) {
  654. DDPDUMP("DSI0+%04x: 0x%08x 0x%08x 0x%08x 0x%08x\n", i,
  655. INREG32(DISPSYS_DSI0_BASE + i), INREG32(DISPSYS_DSI0_BASE + i + 0x4),
  656. INREG32(DISPSYS_DSI0_BASE + i + 0x8),
  657. INREG32(DISPSYS_DSI0_BASE + i + 0xc));
  658. }
  659. DDPDUMP("DSI0 CMDQ+0x200: 0x%08x 0x%08x 0x%08x 0x%08x\n",
  660. INREG32(DISPSYS_DSI0_BASE + 0x200), INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x4),
  661. INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x8),
  662. INREG32(DISPSYS_DSI0_BASE + 0x200 + 0xc));
  663. }
  664. #endif
  665. }
  666. static void dpi_dump_reg(void)
  667. {
  668. int i;
  669. DDPDUMP("-- Start dump DPI registers --\n");
  670. for (i = 0; i <= 0x40; i += 4)
  671. DDPDUMP("DPI+%04x: 0x%08x\n", i, INREG32(DISPSYS_DPI_BASE + i));
  672. for (i = 0x68; i <= 0x7C; i += 4)
  673. DDPDUMP("DPI+%04x: 0x%08x\n", i, INREG32(DISPSYS_DPI_BASE + i));
  674. DDPDUMP("DPI+Color Bar : 0x%04x : 0x%08x\n", 0xF00, INREG32(DISPSYS_DPI_BASE + 0xF00));
  675. DDPDUMP("DPI MMSYS_CG_CON0: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON0));
  676. DDPDUMP("DPI MMSYS_CG_CON1: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON1));
  677. }
  678. static void dpi_dump_analysis(void)
  679. {
  680. #if 0
  681. DDPDUMP("== DISP DPI ANALYSIS ==\n");
  682. /* TODO: mmsys clk?? */
  683. DDPDUMP("DPI clock=0x%x\n", DISP_REG_GET(DISP_REG_CLK_CFG_6_DPI));
  684. DDPDUMP("DPI clock_clear=%d\n", (DISP_REG_GET(DISP_REG_CLK_CFG_6_CLR) >> 7) & 0x1);
  685. #endif
  686. }
  687. int ddp_dump_reg(DISP_MODULE_ENUM module)
  688. {
  689. switch (module) {
  690. case DISP_MODULE_WDMA0:
  691. //wdma_dump_reg(module);
  692. break;
  693. case DISP_MODULE_RDMA0:
  694. case DISP_MODULE_RDMA1:
  695. case DISP_MODULE_RDMA2:
  696. RDMADump(module);
  697. break;
  698. case DISP_MODULE_OVL0:
  699. case DISP_MODULE_OVL1:
  700. case DISP_MODULE_OVL0_2L:
  701. case DISP_MODULE_OVL1_2L:
  702. OVLDump(module);
  703. break;
  704. case DISP_MODULE_GAMMA0:
  705. gamma_dump_reg();
  706. break;
  707. case DISP_MODULE_CONFIG:
  708. mmsys_config_dump_reg();
  709. break;
  710. case DISP_MODULE_MUTEX:
  711. mutex_dump_reg();
  712. break;
  713. case DISP_MODULE_COLOR0:
  714. case DISP_MODULE_COLOR1:
  715. color_dump_reg(module);
  716. break;
  717. case DISP_MODULE_AAL0:
  718. aal_dump_reg();
  719. break;
  720. case DISP_MODULE_PWM0:
  721. pwm_dump_reg(module);
  722. break;
  723. case DISP_MODULE_DSI0:
  724. case DISP_MODULE_DSI1:
  725. case DISP_MODULE_DSIDUAL:
  726. dsi_dump_reg(module);
  727. break;
  728. case DISP_MODULE_DPI:
  729. dpi_dump_reg();
  730. break;
  731. case DISP_MODULE_CCORR0:
  732. ccorr_dump_reg();
  733. break;
  734. case DISP_MODULE_DITHER0:
  735. dither_dump_reg();
  736. break;
  737. default:
  738. DDPDUMP("no dump_reg for module %s(%d)\n", ddp_get_module_name(module), module);
  739. }
  740. return 0;
  741. }
  742. int ddp_dump_analysis(DISP_MODULE_ENUM module)
  743. {
  744. switch (module) {
  745. case DISP_MODULE_WDMA0:
  746. //wdma_dump_analysis(module);
  747. break;
  748. case DISP_MODULE_RDMA0:
  749. case DISP_MODULE_RDMA1:
  750. case DISP_MODULE_RDMA2:
  751. rdma_dump_analysis(module);
  752. break;
  753. case DISP_MODULE_OVL0:
  754. case DISP_MODULE_OVL1:
  755. case DISP_MODULE_OVL0_2L:
  756. case DISP_MODULE_OVL1_2L:
  757. ovl_dump_analysis(module);
  758. break;
  759. case DISP_MODULE_GAMMA0:
  760. gamma_dump_analysis();
  761. break;
  762. case DISP_MODULE_CONFIG:
  763. mmsys_config_dump_analysis();
  764. break;
  765. case DISP_MODULE_MUTEX:
  766. mutex_dump_analysis();
  767. break;
  768. case DISP_MODULE_COLOR0:
  769. case DISP_MODULE_COLOR1:
  770. color_dump_analysis(module);
  771. break;
  772. case DISP_MODULE_AAL0:
  773. aal_dump_analysis();
  774. break;
  775. case DISP_MODULE_PWM0:
  776. pwm_dump_analysis(module);
  777. break;
  778. case DISP_MODULE_DSI0:
  779. case DISP_MODULE_DSI1:
  780. case DISP_MODULE_DSIDUAL:
  781. dsi_analysis(module);
  782. break;
  783. case DISP_MODULE_DPI:
  784. dpi_dump_analysis();
  785. break;
  786. case DISP_MODULE_CCORR0:
  787. ccorr_dump_analyze();
  788. break;
  789. case DISP_MODULE_DITHER0:
  790. dither_dump_analyze();
  791. break;
  792. default:
  793. DDPDUMP("no dump_analysis for module %s(%d)\n", ddp_get_module_name(module),
  794. module);
  795. }
  796. return 0;
  797. }