ddp_dump.c 31 KB

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