ddp_dump.c 33 KB

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