ddp_dump.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060
  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_rdma.h"
  39. #include "platform/ddp_ovl.h"
  40. #include <string.h>
  41. static char *ddp_signal_0(int bit)
  42. {
  43. switch (bit) {
  44. case 31:
  45. return "dpi0_sel_mm_dpi0";
  46. case 30:
  47. return "dis0_sel_mm_dsi0";
  48. case 29:
  49. return "rdma1_sout1_mm_dpi0_sin2";
  50. case 28:
  51. return "rdma1_sout0_mm_dsi0_sin2";
  52. case 27:
  53. return "rdma1_mm_rdma1_sout";
  54. /* case 26: return "bit26-unused"; */
  55. case 25:
  56. return "ovl1_mout1_wdma1";
  57. case 24:
  58. return "ovl1_mout0_rdma1";
  59. case 23:
  60. return "ovl1_mm_ovl1_mout";
  61. case 22:
  62. return "wdma0_sel_wdma0";
  63. case 21:
  64. return "ufoe_mout2_wdma0_sin2";
  65. case 20:
  66. return "ufoe_mout1_dpi0_sin0";
  67. case 19:
  68. return "ufoe_mout0_dsi0_sin0";
  69. case 18:
  70. return "ufoe_mm_ufoe_mout";
  71. case 17:
  72. return "ufoe_sel_mm_ufoe";
  73. case 16:
  74. return "rdma0_sout3_dpi0_sin1";
  75. case 15:
  76. return "rdma0_sout2_dsi0_sin1";
  77. case 14:
  78. return "rdma0_sout1_color_sin0";
  79. case 13:
  80. return "rdma0_sout0_ufoe_sin0";
  81. case 12:
  82. return "rdma0_mm_rdma0_sout";
  83. case 11:
  84. return "dither_mout2_wdma0_sin1";
  85. case 10:
  86. return "dither_mout1_ufoe_sin1";
  87. case 9:
  88. return "dither_mout0_rdma0";
  89. case 8:
  90. return "dither_mm_dither_mout";
  91. /* case 7: return "bit7-unused"; */
  92. case 6:
  93. return "aal_mm_gamma";
  94. case 5:
  95. return "ccorr_mm_aal";
  96. case 4:
  97. return "color_mm_ccorr";
  98. case 3:
  99. return "color_sel_mm_color";
  100. case 2:
  101. return "ovl0_mout1_wdma0_sin0";
  102. case 1:
  103. return "ovl0_mout0_color_sin1";
  104. /* case 0: return "bit0-unused"; */
  105. default:
  106. return NULL;
  107. }
  108. }
  109. static char *ddp_signal_1(int bit)
  110. {
  111. switch (bit) {
  112. case 15:
  113. return "ovl0_sel_ovl0_mout";
  114. case 14:
  115. return "ovl1_mout2_ovl0_sel";
  116. case 13:
  117. return "ovl1_sout1_ovl0_sel";
  118. case 12:
  119. return "ovl1_sout0_ovl1_4L";
  120. case 11:
  121. return "ovl1_2L_OVL1_sout";
  122. case 10:
  123. return "ovl0_sout1_ovl1_2L";
  124. case 9:
  125. return "ovl0_sout0_ovl0_sel";
  126. case 8:
  127. return "ovl0_ovl0_sout";
  128. default:
  129. return NULL;
  130. }
  131. }
  132. static char *ddp_greq_name(int bit)
  133. {
  134. switch (bit) {
  135. case 10:
  136. return "mdp_wrot";
  137. case 9:
  138. return "mdp_wdma";
  139. case 8:
  140. return "mdp_rdma";
  141. case 7:
  142. return "ovl1_2L";
  143. case 6:
  144. return "ovl0_2L";
  145. case 5:
  146. return "wdma1";
  147. case 4:
  148. return "rdma1";
  149. case 3:
  150. return "ovl1";
  151. case 2:
  152. return "wdma0";
  153. case 1:
  154. return "rdma0";
  155. case 0:
  156. return "ovl0";
  157. default:
  158. return NULL;
  159. }
  160. }
  161. // 1 means SMI dose not grant, maybe SMI hang
  162. static int ddp_greq_check(int reg_val)
  163. {
  164. if (reg_val&0x3f) {
  165. DDPMSG("smi greq not grant module: ");
  166. } else {
  167. return 0;
  168. }
  169. if (reg_val&0x1) DDPMSG("disp_wdma1, ");
  170. if (reg_val&0x1) DDPMSG("disp_rdma1, ");
  171. if (reg_val&0x1) DDPMSG("disp_ovl1, ");
  172. if (reg_val&0x1) DDPMSG("disp_wdma0, ");
  173. if (reg_val&0x1) DDPMSG("disp_rdma0, ");
  174. if (reg_val&0x1) DDPMSG("disp_ovl0, ");
  175. DDPMSG("\n");
  176. return 0;
  177. }
  178. static char* ddp_get_mutex_module_name(unsigned int bit)
  179. {
  180. switch (bit) {
  181. case 7:
  182. return "ovl0";
  183. case 8:
  184. return "ovl1";
  185. case 9:
  186. return "rdma0";
  187. case 10:
  188. return "rdma1";
  189. case 11:
  190. return "wdma0";
  191. case 12:
  192. return "color0";
  193. case 13:
  194. return "ccorr";
  195. case 14:
  196. return "aal";
  197. case 15:
  198. return "gamma";
  199. case 16:
  200. return "dither";
  201. case 17:
  202. return "wdma1";
  203. case 18:
  204. return "pwm0";
  205. case 19:
  206. return "ovl0_2l";
  207. case 20:
  208. return "ovl1_2l";
  209. default:
  210. return "mutex-unknown";
  211. }
  212. }
  213. char* ddp_get_fmt_name(DISP_MODULE_ENUM module, unsigned int fmt)
  214. {
  215. if (module==DISP_MODULE_WDMA0 || module==DISP_MODULE_WDMA1) {
  216. switch (fmt) {
  217. case 0:
  218. return "rgb565";
  219. case 1:
  220. return "rgb888";
  221. case 2:
  222. return "rgba8888";
  223. case 3:
  224. return "argb8888";
  225. case 4:
  226. return "uyvy";
  227. case 5:
  228. return "yuy2";
  229. case 7:
  230. return "y-only";
  231. case 8:
  232. return "iyuv";
  233. case 12:
  234. return "nv12";
  235. default:
  236. DDPMSG("ddp_get_fmt_name, unknown fmt=%d, module=%d \n", fmt, module);
  237. return "unknown";
  238. }
  239. } else if (module==DISP_MODULE_OVL0 || module==DISP_MODULE_OVL1) {
  240. switch (fmt) {
  241. case 0:
  242. return "rgb565";
  243. case 1:
  244. return "rgb888";
  245. case 2:
  246. return "rgba8888";
  247. case 3:
  248. return "argb8888";
  249. case 4:
  250. return "uyvy";
  251. case 5:
  252. return "yuyv";
  253. default:
  254. DDPMSG("ddp_get_fmt_name, unknown fmt=%d, module=%d \n", fmt, module);
  255. return "unknown";
  256. }
  257. } else if (module==DISP_MODULE_RDMA0 || module==DISP_MODULE_RDMA1 || module==DISP_MODULE_RDMA2) { // todo: confirm with designers
  258. switch (fmt) {
  259. case 0:
  260. return "rgb565";
  261. case 1:
  262. return "rgb888";
  263. case 2:
  264. return "rgba8888";
  265. case 3:
  266. return "argb8888";
  267. case 4:
  268. return "uyvy";
  269. case 5:
  270. return "yuyv";
  271. default:
  272. DDPMSG("ddp_get_fmt_name, unknown fmt=%d, module=%d \n", fmt, module);
  273. return "unknown";
  274. }
  275. } else if (module==DISP_MODULE_MUTEX) {
  276. switch (fmt) {
  277. case 0:
  278. return "single";
  279. case 1:
  280. return "dsi0_vdo";
  281. case 2:
  282. return "dsi1_vdo";
  283. case 3:
  284. return "dpi";
  285. default:
  286. DDPMSG("ddp_get_fmt_name, unknown fmt=%d, module=%d \n", fmt, module);
  287. return "unknown";
  288. }
  289. } else {
  290. DDPMSG("ddp_get_fmt_name, unknown module=%d \n", module);
  291. }
  292. return "unknown";
  293. }
  294. static char *ddp_clock_0(int bit)
  295. {
  296. switch (bit) {
  297. case 0:
  298. return "smi_common, ";
  299. case 1:
  300. return "smi_larb0, ";
  301. case 10:
  302. return "ovl0, ";
  303. case 11:
  304. return "ovl1, ";
  305. case 12:
  306. return "rdma0, ";
  307. case 13:
  308. return "rdma1, ";
  309. case 14:
  310. return "wdma0, ";
  311. case 15:
  312. return "color, ";
  313. case 16:
  314. return "ccorr, ";
  315. case 17:
  316. return "aal, ";
  317. case 18:
  318. return "gamma, ";
  319. case 19:
  320. return "dither, ";
  321. case 21:
  322. return "ufoe_mout, ";
  323. case 22:
  324. return "wdma1, ";
  325. case 23:
  326. return "ovl0_2L, ";
  327. case 24:
  328. return "ovl1_2L, ";
  329. case 25:
  330. return "ovl0_mout, ";
  331. default:
  332. return NULL;
  333. }
  334. }
  335. static char* ddp_clock_1(int bit)
  336. {
  337. switch (bit) {
  338. case 0:
  339. return "disp_pwm_mm, ";
  340. case 1:
  341. return "disp_pwm_26m, ";
  342. case 2:
  343. return "dsi_engine, ";
  344. case 3:
  345. return "dsi_digital, ";
  346. case 4:
  347. return "dpi_pixel, ";
  348. case 5:
  349. return "dpi_engine, ";
  350. default :
  351. return "";
  352. }
  353. }
  354. static void mutex_dump_reg(void)
  355. {
  356. DDPMSG("==DISP MUTEX REGS==\n");
  357. DDPMSG("(0x000)M_INTEN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTEN));
  358. DDPMSG("(0x004)M_INTSTA =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTSTA));
  359. DDPMSG("(0x020)M0_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_EN));
  360. DDPMSG("(0x028)M0_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_RST));
  361. DDPMSG("(0x02c)M0_MOD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_MOD));
  362. DDPMSG("(0x030)M0_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_SOF));
  363. DDPMSG("(0x040)M1_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_EN));
  364. DDPMSG("(0x048)M1_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_RST));
  365. DDPMSG("(0x04c)M1_MOD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_MOD));
  366. DDPMSG("(0x050)M1_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_SOF));
  367. DDPMSG("(0x060)M2_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_EN));
  368. DDPMSG("(0x068)M2_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_RST));
  369. DDPMSG("(0x06c)M2_MOD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_MOD));
  370. DDPMSG("(0x070)M2_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_SOF));
  371. DDPMSG("(0x080)M3_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_EN));
  372. DDPMSG("(0x088)M3_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_RST));
  373. DDPMSG("(0x08c)M3_MOD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_MOD));
  374. DDPMSG("(0x090)M3_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_SOF));
  375. DDPMSG("(0x0a0)M4_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_EN));
  376. DDPMSG("(0x0a8)M4_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_RST));
  377. DDPMSG("(0x0ac)M4_MOD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_MOD));
  378. DDPMSG("(0x0b0)M4_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_SOF));
  379. DDPMSG("(0x0c0)M5_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_EN));
  380. DDPMSG("(0x0c8)M5_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_RST));
  381. DDPMSG("(0x0cc)M5_MOD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_MOD));
  382. DDPMSG("(0x0d0)M5_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_SOF));
  383. DDPMSG("(0x200)DEBUG_OUT_SEL =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DEBUG_OUT_SEL));
  384. return ;
  385. }
  386. static void mutex_dump_analysis(void)
  387. {
  388. int i=0;
  389. int j=0;
  390. char mutex_module[512]= {'\0'};
  391. char * p = NULL;
  392. int len = 0;
  393. DDPMSG("==DISP Mutex Analysis==\n");
  394. for (i = 0; i < 5; i++) {
  395. p = mutex_module;
  396. len = 0;
  397. if ( DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD(i))!=0 &&
  398. ((DISP_REG_GET(DISP_REG_CONFIG_MUTEX_EN(i)+0x20*i)==1 &&
  399. DISP_REG_GET(DISP_REG_CONFIG_MUTEX_SOF(i)+0x20*i)!=SOF_SINGLE ) ||
  400. DISP_REG_GET(DISP_REG_CONFIG_MUTEX_SOF(i)+0x20*i)==SOF_SINGLE)) {
  401. len = sprintf(p,"MUTEX%d :mode=%s,module=(", i, ddp_get_fmt_name(DISP_MODULE_MUTEX, DISP_REG_GET(DISP_REG_CONFIG_MUTEX_SOF(i))));
  402. p += len;
  403. for (j=6; j<=18; j++) {
  404. if ((DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD(i))>>j)&0x1) {
  405. len = sprintf(p,"%s,", ddp_get_mutex_module_name(j));
  406. p += len;
  407. }
  408. }
  409. DDPMSG("%s)\n",mutex_module);
  410. }
  411. }
  412. return;
  413. }
  414. static void mmsys_config_dump_reg(void)
  415. {
  416. DDPMSG("== DISP Config ==\n");
  417. DDPMSG("(0x0 )MMSYS_INTEN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTEN ));
  418. DDPMSG("(0x4 )MMSYS_INTSTA =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTSTA ));
  419. DDPMSG("(0x8 )MFG_APB_TX_CON =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MFG_APB_TX_CON ));
  420. DDPMSG("(0xC )PWM_APB_ERR_ADDR =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_PWM_APB_ERR_ADDR ));
  421. DDPMSG("(0x30)OVL0_MOUT_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL0_MOUT_EN ));
  422. DDPMSG("(0x34)OVL1_MOUT_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL1_MOUT_EN ));
  423. DDPMSG("(0x38)DITHER_MOUT_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DITHER_MOUT_EN ));
  424. DDPMSG("(0x3C)UFOE_MOUT_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_UFOE_MOUT_EN ));
  425. DDPMSG("(0x40)MMSYS_MOUT_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MOUT_RST ));
  426. DDPMSG("(0x58)COLOR0_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_COLOR0_SEL_IN ));
  427. DDPMSG("(0x5C)WDMA0_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_WDMA0_SEL_IN ));
  428. DDPMSG("(0x60)UFOE_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_UFOE_SEL_IN ));
  429. DDPMSG("(0x64)DSI0_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DSI0_SEL_IN ));
  430. DDPMSG("(0x68)DPI0_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DPI0_SEL_IN ));
  431. DDPMSG("(0x6C)RDMA0_SOUT_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RDMA0_SOUT_SEL_IN));
  432. DDPMSG("(0x70)RDMA1_SOUT_SIN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RDMA1_SOUT_SEL_IN));
  433. DDPMSG("(0x0F0)MM_MISC =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MISC ));
  434. DDPMSG("(0x100)MM_CG_CON0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0 ));
  435. DDPMSG("(0x110)MM_CG_CON1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1 ));
  436. DDPMSG("(0x120)MM_HW_DCM_DIS0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_DIS0 ));
  437. DDPMSG("(0x130)MM_HW_DCM_DIS1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_DIS1 ));
  438. DDPMSG("(0x140)MM_SW0_RST_B =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW0_RST_B ));
  439. DDPMSG("(0x144)MM_SW1_RST_B =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW1_RST_B ));
  440. DDPMSG("(0x150)MM_LCM_RST_B =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_LCM_RST_B ));
  441. DDPMSG("(0x180)LB4_AXI_CFG_WD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_LARB4_AXI_ASIF_CFG_WD));
  442. DDPMSG("(0x184)LB4_AXI_CFG_RD =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_LARB4_AXI_ASIF_CFG_RD));
  443. DDPMSG("(0x880)MM_DBG_OUT_SEL =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DEBUG_OUT_SEL ));
  444. DDPMSG("(0x890)MM_DUMMY0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY0 ));
  445. DDPMSG("(0x894)MM_DUMMY1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY1 ));
  446. DDPMSG("(0x898)MM_DUMMY2 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY2 ));
  447. DDPMSG("(0x89C)MM_DUMMY3 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY3 ));
  448. DDPMSG("(0x8a0)DISP_VALID_0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0 ));
  449. DDPMSG("(0x8a4)DISP_VALID_1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1 ));
  450. DDPMSG("(0x8a8)DISP_READY_0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0 ));
  451. DDPMSG("(0x8ac)DISP_READY_1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1 ));
  452. return ;
  453. }
  454. /* ------ clock:
  455. Before power on mmsys:
  456. CLK_CFG_0_CLR (address is 0x10000048) = 0x80000000 (bit 31).
  457. Before using DISP_PWM0 or DISP_PWM1:
  458. CLK_CFG_1_CLR(address is 0x10000058)=0x80 (bit 7).
  459. Before using DPI pixel clock:
  460. CLK_CFG_6_CLR(address is 0x100000A8)=0x80 (bit 7).
  461. Only need to enable the corresponding bits of MMSYS_CG_CON0 and MMSYS_CG_CON1 for the modules:
  462. smi_common, larb0, mdp_crop, fake_eng, mutex_32k, pwm0, pwm1, dsi0, dsi1, dpi.
  463. Other bits could keep 1. Suggest to keep smi_common and larb0 always clock on.
  464. --------valid & ready
  465. example:
  466. ovl0 -> ovl0_mout_ready=1 means engines after ovl_mout are ready for receiving data
  467. ovl0_mout_ready=0 means ovl0_mout can not receive data, maybe ovl0_mout or after engines config error
  468. ovl0 -> ovl0_mout_valid=1 means engines before ovl0_mout is OK,
  469. ovl0_mout_valid=0 means ovl can not transfer data to ovl0_mout, means ovl0 or before engines are not ready.
  470. */
  471. static int mmsys_config_dump_analysis(void)
  472. {
  473. unsigned int i = 0;
  474. unsigned int reg = 0;
  475. char clock_on[512]= {'\0'};
  476. char * pos = NULL;
  477. char *name;
  478. unsigned int valid0 = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0);
  479. unsigned int valid1 = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1);
  480. unsigned int ready0 = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0);
  481. unsigned int ready1 = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1);
  482. unsigned int greq = DISP_REG_GET(DISP_REG_CONFIG_SMI_LARB0_GREQ);
  483. DDPMSG("==DISP MMSYS_CONFIG ANALYSIS==\n");
  484. DDPMSG("mmsys clock=0x%x, CG_CON0=0x%x, CG_CON1=0x%x \n",
  485. DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK),
  486. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0),
  487. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
  488. if ((DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK)>>31)&0x1) {
  489. DDPERR("mmsys clock abnormal!!\n");
  490. }
  491. #if 0
  492. DDPMSG("PLL clock=0x%x\n", DISP_REG_GET(DISP_REG_VENCPLL_CON0));
  493. if (!(DISP_REG_GET(DISP_REG_VENCPLL_CON0)&0x1)) {
  494. DDPERR("PLL clock abnormal!!\n");
  495. }
  496. #endif
  497. reg = DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0);
  498. for (i = 0; i < 32; i++) {
  499. if ((reg & (1 << i)) == 0) {
  500. name = ddp_clock_0(i);
  501. ASSERT(strlen(clock_on) + strlen(name) < 512);
  502. strncat(clock_on, name, sizeof(clock_on));
  503. }
  504. }
  505. reg = DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1);
  506. for (i = 0; i < 32; i++) {
  507. if ((reg & (1 << i)) == 0) {
  508. name = ddp_clock_1(i);
  509. strncat(clock_on, name, sizeof(clock_on));
  510. }
  511. }
  512. DDPMSG("clock on modules:%s\n", clock_on);
  513. // DDPMSG("clock_ef setting:%u,%u\n", DISP_REG_GET(DISP_REG_CONFIG_C09),DISP_REG_GET(DISP_REG_CONFIG_C10));
  514. #if 0
  515. DDPMSG("clock_mm setting:%u \n",
  516. DISP_REG_GET(DISP_REG_CONFIG_C11));
  517. if (DISP_REG_GET(DISP_REG_CONFIG_C11)&0xff000000!=0xff000000) {
  518. DDPMSG("error, MM clock bit 24~bit31 should be 1, but real value=0x%x", DISP_REG_GET(DISP_REG_CONFIG_C11));
  519. }
  520. #endif
  521. if (((DISP_REG_GET(DISP_REG_CONFIG_C09)>>7)&0x7)==5 &&
  522. ((DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_0)&0xfff)>1200 ||
  523. (DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_1)&0xfffff)>1920)) {
  524. DDPERR("check clock1 setting error:(120,192),(%d, %d)\n",
  525. DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_0)&0xfff,
  526. DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_1)&0xfffff);
  527. } else if (((DISP_REG_GET(DISP_REG_CONFIG_C09)>>8)&0x3)==3 &&
  528. ((DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_0)&0xfff)>800 ||
  529. (DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_1)&0xfffff)>1280)) {
  530. DDPERR("check clock1 setting error:(80,128),(%d, %d)\n",
  531. DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_0)&0xfff,
  532. DISP_REG_GET(DISP_REG_RDMA_SIZE_CON_1)&0xfffff);
  533. }
  534. if (((DISP_REG_GET(DISP_REG_CONFIG_C10)>>7)&0x7)==5 &&
  535. ((DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)&0xfff)>1200 ||
  536. ((DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)>>16)&0xfff)>1920)) {
  537. DDPERR("check clock2 setting error:(120,192),(%d, %d)\n",
  538. DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)&0xfff,
  539. (DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)>>16)&0xfff);
  540. } else if (((DISP_REG_GET(DISP_REG_CONFIG_C10)>>8)&0x3)==3 &&
  541. ((DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)&0xfff)>800 ||
  542. ((DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)>>16)&0xfff)>1280)) {
  543. DDPERR("check clock2 setting error:(80,128),(%d, %d)\n",
  544. DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)&0xfff,
  545. (DISP_REG_GET(DISP_REG_OVL_ROI_SIZE+DISP_INDEX_OFFSET*1)>>16)&0xfff);
  546. }
  547. DDPMSG("valid0=0x%x, valid1=0x%x, ready0=0x%x, ready1=0x%x, greq=0%x\n",
  548. valid0,valid1,ready0,ready1, greq);
  549. for (i = 0; i < 32; i++) {
  550. name = ddp_signal_0(i);
  551. if (!name)
  552. continue;
  553. pos = clock_on;
  554. pos += sprintf(pos, "%25s: ", name);
  555. if ((valid0 & (1 << i)))
  556. pos += sprintf(pos, "%10s,", "valid");
  557. else
  558. pos += sprintf(pos, "%10s,", "not valid");
  559. if ((ready0 & (1 << i)))
  560. pos += sprintf(pos, "%10s", "ready");
  561. else
  562. pos += sprintf(pos, "%10s", "not ready");
  563. DDPMSG("%s\n", clock_on);
  564. }
  565. for (i = 0; i < 32; i++) {
  566. name = ddp_signal_1(i);
  567. if (!name)
  568. continue;
  569. pos = clock_on;
  570. pos += sprintf(pos, "%25s: ", name);
  571. if ((valid1 & (1 << i)))
  572. pos += sprintf(pos, "%10s,", "valid");
  573. else
  574. pos += sprintf(pos, "%10s,", "not valid");
  575. if ((ready1 & (1 << i)))
  576. pos += sprintf(pos, "%10s", "ready");
  577. else
  578. pos += sprintf(pos, "%10s", "not ready");
  579. DDPMSG("%s\n", clock_on);
  580. }
  581. /* greq: 1 means SMI dose not grant, maybe SMI hang */
  582. if (greq)
  583. DDPMSG("smi greq not grant module: ");
  584. else
  585. return 0;
  586. clock_on[0] = '\0';
  587. for (i = 0; i < 32; i++) {
  588. name = ddp_greq_name(i);
  589. if (!name)
  590. continue;
  591. strncat(clock_on, name, sizeof(clock_on));
  592. DDPMSG("%s\n", clock_on);
  593. }
  594. return 0;
  595. }
  596. static void gamma_dump_reg(void)
  597. {
  598. DDPMSG("==DISP GAMMA REGS==\n");
  599. DDPMSG("(0x000)GA_EN =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_EN));
  600. DDPMSG("(0x004)GA_RESET =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_RESET));
  601. DDPMSG("(0x008)GA_INTEN =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTEN));
  602. DDPMSG("(0x00c)GA_INTSTA =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTSTA));
  603. DDPMSG("(0x010)GA_STATUS =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_STATUS));
  604. DDPMSG("(0x020)GA_CFG =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CFG));
  605. DDPMSG("(0x024)GA_IN_COUNT =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT));
  606. DDPMSG("(0x028)GA_OUT_COUNT =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT));
  607. DDPMSG("(0x02c)GA_CHKSUM =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CHKSUM));
  608. DDPMSG("(0x030)GA_SIZE =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_SIZE));
  609. DDPMSG("(0x0c0)GA_DUMMY_REG =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_DUMMY_REG));
  610. DDPMSG("(0x800)GA_LUT =0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_LUT));
  611. return ;
  612. }
  613. static void gamma_dump_analysis(void)
  614. {
  615. DDPMSG("==DISP GAMMA ANALYSIS==\n");
  616. DDPMSG("gamma: en=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  617. DISP_REG_GET(DISP_REG_GAMMA_EN),
  618. (DISP_REG_GET(DISP_REG_GAMMA_SIZE)>>16)&0x1fff,
  619. DISP_REG_GET(DISP_REG_GAMMA_SIZE)&0x1fff,
  620. DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT)&0x1fff,
  621. (DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT)>>16)&0x1fff,
  622. DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT)&0x1fff,
  623. (DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT)>>16)&0x1fff);
  624. return;
  625. }
  626. static void merge_dump_reg(void)
  627. {
  628. DDPMSG("==DISP MERGE REGS==\n");
  629. DDPMSG("(0x000)MERGE_EN =0x%x\n", DISP_REG_GET(DISP_REG_MERGE_ENABLE));
  630. DDPMSG("(0x004)MERGE_SW_RESET =0x%x\n", DISP_REG_GET(DISP_REG_MERGE_SW_RESET));
  631. DDPMSG("(0x008)MERGE_DEBUG =0x%x\n", DISP_REG_GET(DISP_REG_MERGE_DEBUG));
  632. return ;
  633. }
  634. static void merge_dump_analysis(void)
  635. {
  636. DDPMSG("==DISP MERGE ANALYSIS==\n");
  637. DDPMSG("merge: en=%d, debug=0x%x \n",DISP_REG_GET(DISP_REG_MERGE_ENABLE),DISP_REG_GET(DISP_REG_MERGE_DEBUG));
  638. return ;
  639. }
  640. static void split_dump_reg(DISP_MODULE_ENUM module)
  641. {
  642. DDPMSG("error: disp_split dose not exist! module=%d \n", module);
  643. return ;
  644. }
  645. static void split_dump_analysis(DISP_MODULE_ENUM module)
  646. {
  647. DDPMSG("error: disp_split dose not exist! module=%d \n", module);
  648. return ;
  649. }
  650. static void color_dump_reg(DISP_MODULE_ENUM module)
  651. {
  652. int index =0;
  653. if (DISP_MODULE_COLOR0==module) {
  654. index = 0;
  655. } else if (DISP_MODULE_COLOR1==module) {
  656. DDPMSG("error: DISP COLOR%d dose not exist!\n", index);
  657. return ;
  658. }
  659. DDPMSG("==DISP COLOR%d REGS==\n", index);
  660. DDPMSG("(0x400)COLOR_CFG_MAIN =0x%x\n", DISP_REG_GET(DISP_COLOR_CFG_MAIN));
  661. DDPMSG("(0x404)COLOR_PXL_CNT_MAIN =0x%x\n", DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN));
  662. DDPMSG("(0x408)COLOR_LINE_CNT_MAIN =0x%x\n", DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN));
  663. DDPMSG("(0xc00)COLOR_START =0x%x\n", DISP_REG_GET(DISP_COLOR_START));
  664. DDPMSG("(0xc50)COLOR_INTER_IP_W =0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH));
  665. DDPMSG("(0xc54)COLOR_INTER_IP_H =0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT));
  666. return ;
  667. }
  668. static void color_dump_analysis(DISP_MODULE_ENUM module)
  669. {
  670. int index =0;
  671. if (DISP_MODULE_COLOR0==module) {
  672. index = 0;
  673. } else if (DISP_MODULE_COLOR1==module) {
  674. DDPMSG("error: DISP COLOR%d dose not exist!\n", index);
  675. return ;
  676. }
  677. DDPMSG("==DISP COLOR%d ANALYSIS==\n", index);
  678. DDPMSG("color%d: bypass=%d, w=%d, h=%d, pixel_cnt=%d, line_cnt=%d, \n",
  679. index,
  680. (DISP_REG_GET(DISP_COLOR_CFG_MAIN)>>7)&0x1,
  681. DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH),
  682. DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT),
  683. DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN)&0xffff,
  684. (DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN)>>16)&0x1fff);
  685. return ;
  686. }
  687. static void aal_dump_reg(void)
  688. {
  689. DDPMSG("==DISP AAL REGS==\n");
  690. DDPMSG("(0x000)AAL_EN =0x%x\n", DISP_REG_GET(DISP_AAL_EN));
  691. DDPMSG("(0x008)AAL_INTEN =0x%x\n", DISP_REG_GET(DISP_AAL_INTEN));
  692. DDPMSG("(0x00c)AAL_INTSTA =0x%x\n", DISP_REG_GET(DISP_AAL_INTSTA));
  693. DDPMSG("(0x020)AAL_CFG =0x%x\n", DISP_REG_GET(DISP_AAL_CFG));
  694. DDPMSG("(0x024)AAL_IN_CNT =0x%x\n", DISP_REG_GET(DISP_AAL_IN_CNT));
  695. DDPMSG("(0x028)AAL_OUT_CNT =0x%x\n", DISP_REG_GET(DISP_AAL_OUT_CNT));
  696. DDPMSG("(0x030)AAL_SIZE =0x%x\n", DISP_REG_GET(DISP_AAL_SIZE));
  697. DDPMSG("(0x20c)AAL_CABC_00 =0x%x\n", DISP_REG_GET(DISP_AAL_CABC_00));
  698. DDPMSG("(0x214)AAL_CABC_02 =0x%x\n", DISP_REG_GET(DISP_AAL_CABC_02));
  699. DDPMSG("(0x20c)AAL_STATUS_00 =0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00));
  700. DDPMSG("(0x210)AAL_STATUS_01 =0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00 + 0x4));
  701. DDPMSG("(0x2a0)AAL_STATUS_31 =0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32 - 0x4));
  702. DDPMSG("(0x2a4)AAL_STATUS_32 =0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32));
  703. DDPMSG("(0x354)AAL_DRE_GAIN_FILTER_00 =0x%x\n", DISP_REG_GET(DISP_AAL_DRE_GAIN_FILTER_00));
  704. DDPMSG("(0x3b0)AAL_DRE_MAPPING_00 =0x%x\n", DISP_REG_GET(DISP_AAL_DRE_MAPPING_00));
  705. return ;
  706. }
  707. static void aal_dump_analysis(void)
  708. {
  709. DDPMSG("==DISP AAL ANALYSIS==\n");
  710. DDPMSG("aal: bypass=%d, relay=%d, en=%d, w=%d, h=%d, inLCnt=%d, inPCnt=%d, outLCnt=%d, outPCnt=%d\n",
  711. DISP_REG_GET(DISP_AAL_EN)==0x0,
  712. DISP_REG_GET(DISP_AAL_CFG)&0x01,
  713. DISP_REG_GET(DISP_AAL_EN),
  714. (DISP_REG_GET(DISP_AAL_SIZE)>>16)&0x1fff,
  715. DISP_REG_GET(DISP_AAL_SIZE)&0x1fff,
  716. DISP_REG_GET(DISP_AAL_IN_CNT)&0x1fff,
  717. (DISP_REG_GET(DISP_AAL_IN_CNT)>>16)&0x1fff,
  718. DISP_REG_GET(DISP_AAL_OUT_CNT)&0x1fff,
  719. (DISP_REG_GET(DISP_AAL_OUT_CNT)>>16)&0x1fff);
  720. }
  721. static void pwm_dump_reg(DISP_MODULE_ENUM module)
  722. {
  723. int index = 0;
  724. unsigned int reg_base = 0;
  725. if (module == DISP_MODULE_PWM0) {
  726. index = 0;
  727. reg_base = DISPSYS_PWM0_BASE;
  728. } else {
  729. index = 1;
  730. reg_base = DISPSYS_PWM1_BASE;
  731. }
  732. DDPMSG("==DISP PWM%d REGS==\n", index);
  733. DDPMSG("(0x000)PWM_EN =0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_EN_OFF));
  734. DDPMSG("(0x008)PWM_CON_0 =0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_0_OFF));
  735. DDPMSG("(0x010)PWM_CON_1 =0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_1_OFF));
  736. DDPMSG("(0x028)PWM_DEBUG =0x%x\n", DISP_REG_GET(reg_base + 0x28));
  737. return ;
  738. }
  739. static void pwm_dump_analysis(DISP_MODULE_ENUM module)
  740. {
  741. int index = 0;
  742. if (module == DISP_MODULE_PWM0) {
  743. index = 0;
  744. } else {
  745. index = 1;
  746. }
  747. DDPMSG("==DISP PWM%d ANALYSIS==\n", index);
  748. DDPMSG("pwm clock=%d \n", (DISP_REG_GET(DISP_REG_CLK_CFG_1_CLR)>>7)&0x1);
  749. return;
  750. }
  751. static void od_dump_reg(void)
  752. {
  753. DDPMSG("==DISP OD REGS==\n");
  754. DDPMSG("(00)EN =0x%x \n", DISP_REG_GET(DISP_REG_OD_EN ));
  755. DDPMSG("(04)RESET =0x%x \n", DISP_REG_GET(DISP_REG_OD_RESET ));
  756. DDPMSG("(08)INTEN =0x%x \n", DISP_REG_GET(DISP_REG_OD_INTEN ));
  757. DDPMSG("(0C)INTSTA =0x%x \n", DISP_REG_GET(DISP_REG_OD_INTSTA ));
  758. DDPMSG("(10)STATUS =0x%x \n", DISP_REG_GET(DISP_REG_OD_STATUS ));
  759. DDPMSG("(20)CFG =0x%x \n", DISP_REG_GET(DISP_REG_OD_CFG ));
  760. DDPMSG("(24)INPUT_COUNT =0x%x \n", DISP_REG_GET(DISP_REG_OD_INPUT_COUNT ));
  761. DDPMSG("(28)OUTPUT_COUNT =0x%x \n", DISP_REG_GET(DISP_REG_OD_OUTPUT_COUNT ));
  762. DDPMSG("(2C)CHKSUM =0x%x \n", DISP_REG_GET(DISP_REG_OD_CHKSUM ));
  763. DDPMSG("(30)SIZE =0x%x \n", DISP_REG_GET(DISP_REG_OD_SIZE ));
  764. DDPMSG("(40)HSYNC_WIDTH =0x%x \n", DISP_REG_GET(DISP_REG_OD_HSYNC_WIDTH ));
  765. DDPMSG("(44)VSYNC_WIDTH =0x%x \n", DISP_REG_GET(DISP_REG_OD_VSYNC_WIDTH ));
  766. DDPMSG("(48)MISC =0x%x \n", DISP_REG_GET(DISP_REG_OD_MISC ));
  767. DDPMSG("(C0)DUMMY_REG =0x%x \n", DISP_REG_GET(DISP_REG_OD_DUMMY_REG ));
  768. return;
  769. }
  770. static void od_dump_analysis(void)
  771. {
  772. DDPMSG("==DISP OD ANALYSIS==\n");
  773. DDPMSG("od: w=%d, h=%d, bypass=%d \n",
  774. (DISP_REG_GET(DISP_REG_OD_SIZE)>>16)&0xffff,
  775. DISP_REG_GET(DISP_REG_OD_SIZE)&0xffff,
  776. DISP_REG_GET(DISP_REG_OD_CFG)&0x1);
  777. return;
  778. }
  779. static void ccorr_dump_reg(void)
  780. {
  781. DDPMSG("==DISP CCORR REGS==\n");
  782. DDPMSG("(00)EN =0x%x \n", DISP_REG_GET(DISP_REG_CCORR_EN ));
  783. DDPMSG("(20)CFG =0x%x \n", DISP_REG_GET(DISP_REG_CCORR_CFG ));
  784. DDPMSG("(24)IN_CNT =0x%x\n", DISP_REG_GET(DISP_REG_CCORR_IN_CNT));
  785. DDPMSG("(28)OUT_CNT =0x%x\n", DISP_REG_GET(DISP_REG_CCORR_OUT_CNT));
  786. DDPMSG("(30)SIZE =0x%x \n", DISP_REG_GET(DISP_REG_CCORR_SIZE));
  787. }
  788. static void ccorr_dump_analyze(void)
  789. {
  790. DDPMSG("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",
  791. DISP_REG_GET(DISP_REG_CCORR_EN),
  792. DISP_REG_GET(DISP_REG_CCORR_CFG),
  793. (DISP_REG_GET(DISP_REG_CCORR_SIZE)>>16)&0x1fff,
  794. DISP_REG_GET(DISP_REG_CCORR_SIZE)&0x1fff,
  795. DISP_REG_GET(DISP_REG_CCORR_IN_CNT)&0x1fff,
  796. (DISP_REG_GET(DISP_REG_CCORR_IN_CNT)>>16)&0x1fff,
  797. DISP_REG_GET(DISP_REG_CCORR_IN_CNT)&0x1fff,
  798. (DISP_REG_GET(DISP_REG_CCORR_IN_CNT)>>16)&0x1fff);
  799. }
  800. static void dither_dump_reg(void)
  801. {
  802. DDPMSG("==DISP DITHER REGS==\n");
  803. DDPMSG("(00)EN =0x%x \n", DISP_REG_GET(DISP_REG_DITHER_EN ));
  804. DDPMSG("(20)CFG =0x%x \n", DISP_REG_GET(DISP_REG_DITHER_CFG ));
  805. DDPMSG("(24)IN_CNT =0x%x\n", DISP_REG_GET(DISP_REG_DITHER_IN_CNT));
  806. DDPMSG("(28)OUT_CNT =0x%x\n", DISP_REG_GET(DISP_REG_DITHER_IN_CNT));
  807. DDPMSG("(30)SIZE =0x%x \n", DISP_REG_GET(DISP_REG_DITHER_SIZE));
  808. }
  809. static void dither_dump_analyze(void)
  810. {
  811. DDPMSG("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",
  812. DISP_REG_GET(DISPSYS_DITHER_BASE + 0x000),
  813. DISP_REG_GET(DISPSYS_DITHER_BASE + 0x020),
  814. (DISP_REG_GET(DISP_REG_DITHER_SIZE)>>16)&0x1fff,
  815. DISP_REG_GET(DISP_REG_DITHER_SIZE)&0x1fff,
  816. DISP_REG_GET(DISP_REG_DITHER_IN_CNT)&0x1fff,
  817. (DISP_REG_GET(DISP_REG_DITHER_IN_CNT)>>16)&0x1fff,
  818. DISP_REG_GET(DISP_REG_DITHER_OUT_CNT)&0x1fff,
  819. (DISP_REG_GET(DISP_REG_DITHER_OUT_CNT)>>16)&0x1fff);
  820. }
  821. static void ufoe_dump_reg(void)
  822. {
  823. //DDPMSG("==DISP UFOE REGS==\n");
  824. //DDPMSG("(0x000)UFOE_START =0x%x\n", DISP_REG_GET(DISP_REG_UFO_START));
  825. return;
  826. }
  827. static void ufoe_dump_analysis(void)
  828. {
  829. //DDPMSG("==DISP UFOE ANALYSIS==\n");
  830. //DDPMSG("ufoe: bypass=%d,0x%08x\n",
  831. // DISP_REG_GET(DISP_REG_UFO_START)==0x4,
  832. // DISP_REG_GET(DISP_REG_UFO_START));
  833. return;
  834. }
  835. static void dsi_dump_reg(DISP_MODULE_ENUM module)
  836. {
  837. int i =0;
  838. if (DISP_MODULE_DSI0) {
  839. DDPMSG("==DISP DSI0 REGS==\n");
  840. for (i = 0; i < 20*16; i += 16) {
  841. DDPMSG("DSI0+%04x : 0x%08x 0x%08x 0x%08x 0x%08x\n", i, INREG32(DISPSYS_DSI0_BASE + i), INREG32(DISPSYS_DSI0_BASE + i + 0x4), INREG32(DISPSYS_DSI0_BASE + i + 0x8), INREG32(DISPSYS_DSI0_BASE + i + 0xc));
  842. }
  843. DDPMSG("DSI0 CMDQ+0x200 : 0x%08x 0x%08x 0x%08x 0x%08x\n", INREG32(DISPSYS_DSI0_BASE + 0x200), INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x4), INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x8), INREG32(DISPSYS_DSI0_BASE + 0x200 + 0xc));
  844. }
  845. return ;
  846. }
  847. static void dpi_dump_analysis(void)
  848. {
  849. DDPMSG("==DISP DPI ANALYSIS==\n");
  850. DDPMSG("DPI clock=0x%x \n", DISP_REG_GET(DISP_REG_CLK_CFG_6_DPI));
  851. #if 0
  852. if ((DISP_REG_GET(DISP_REG_VENCPLL_CON0)>>7)&0x1) {
  853. DDPMSG("DPI clock abnormal!!\n");
  854. }
  855. #endif
  856. DDPMSG("DPI clock_clear=%d \n", (DISP_REG_GET(DISP_REG_CLK_CFG_6_CLR)>>7)&0x1);
  857. return;
  858. }
  859. int ddp_dump_reg(DISP_MODULE_ENUM module)
  860. {
  861. switch (module) {
  862. case DISP_MODULE_WDMA0:
  863. case DISP_MODULE_WDMA1:
  864. //WDMADump(module);
  865. break;
  866. case DISP_MODULE_RDMA0:
  867. case DISP_MODULE_RDMA1:
  868. case DISP_MODULE_RDMA2:
  869. RDMADump(module);
  870. break;
  871. case DISP_MODULE_OVL0:
  872. case DISP_MODULE_OVL1:
  873. case DISP_MODULE_OVL0_2L:
  874. case DISP_MODULE_OVL1_2L:
  875. OVLDump(module);
  876. break;
  877. case DISP_MODULE_GAMMA:
  878. gamma_dump_reg();
  879. break;
  880. case DISP_MODULE_CONFIG:
  881. mmsys_config_dump_reg();
  882. break;
  883. case DISP_MODULE_MUTEX:
  884. mutex_dump_reg();
  885. break;
  886. case DISP_MODULE_MERGE:
  887. merge_dump_reg();
  888. break;
  889. case DISP_MODULE_SPLIT0:
  890. case DISP_MODULE_SPLIT1:
  891. split_dump_reg(module);
  892. break;
  893. case DISP_MODULE_COLOR0:
  894. case DISP_MODULE_COLOR1:
  895. color_dump_reg(module);
  896. break;
  897. case DISP_MODULE_AAL:
  898. aal_dump_reg();
  899. break;
  900. case DISP_MODULE_PWM0:
  901. case DISP_MODULE_PWM1:
  902. pwm_dump_reg(module);
  903. break;
  904. case DISP_MODULE_UFOE:
  905. ufoe_dump_reg();
  906. break;
  907. case DISP_MODULE_OD:
  908. od_dump_reg();
  909. break;
  910. case DISP_MODULE_DSI0:
  911. case DISP_MODULE_DSI1:
  912. dsi_dump_reg(module);
  913. break;
  914. case DISP_MODULE_DPI:
  915. break;
  916. case DISP_MODULE_CCORR:
  917. ccorr_dump_reg();
  918. break;
  919. case DISP_MODULE_DITHER:
  920. dither_dump_reg();
  921. break;
  922. default:
  923. DDPMSG("DDP error, dump_reg unknow module=%d\n", module);
  924. }
  925. return 0;
  926. }
  927. int ddp_dump_analysis(DISP_MODULE_ENUM module)
  928. {
  929. switch (module) {
  930. case DISP_MODULE_WDMA0:
  931. case DISP_MODULE_WDMA1:
  932. //wdma_dump_analysis(module);
  933. break;
  934. case DISP_MODULE_RDMA0:
  935. case DISP_MODULE_RDMA1:
  936. case DISP_MODULE_RDMA2:
  937. rdma_dump_analysis(module);
  938. break;
  939. case DISP_MODULE_OVL0:
  940. case DISP_MODULE_OVL1:
  941. ovl_dump_analysis(module);
  942. break;
  943. case DISP_MODULE_GAMMA:
  944. gamma_dump_analysis();
  945. break;
  946. case DISP_MODULE_CONFIG:
  947. mmsys_config_dump_analysis();
  948. break;
  949. case DISP_MODULE_MUTEX:
  950. mutex_dump_analysis();
  951. break;
  952. case DISP_MODULE_MERGE:
  953. merge_dump_analysis();
  954. break;
  955. case DISP_MODULE_SPLIT0:
  956. case DISP_MODULE_SPLIT1:
  957. split_dump_analysis(module);
  958. break;
  959. case DISP_MODULE_COLOR0:
  960. case DISP_MODULE_COLOR1:
  961. color_dump_analysis(module);
  962. break;
  963. case DISP_MODULE_AAL:
  964. aal_dump_analysis();
  965. break;
  966. case DISP_MODULE_UFOE:
  967. ufoe_dump_analysis();
  968. break;
  969. case DISP_MODULE_OD:
  970. od_dump_analysis();
  971. break;
  972. case DISP_MODULE_PWM0:
  973. case DISP_MODULE_PWM1:
  974. pwm_dump_analysis(module);
  975. break;
  976. case DISP_MODULE_DSI0:
  977. case DISP_MODULE_DSI1:
  978. case DISP_MODULE_DSIDUAL:
  979. break;
  980. case DISP_MODULE_DPI:
  981. dpi_dump_analysis();
  982. break;
  983. case DISP_MODULE_CCORR:
  984. ccorr_dump_analyze();
  985. break;
  986. case DISP_MODULE_DITHER:
  987. dither_dump_analyze();
  988. break;
  989. default:
  990. DDPMSG("DDP error, dump_analysis unknow module=%d \n", module);
  991. }
  992. return 0;
  993. }