ddp_dump.c 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2015. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #define LOG_TAG "DUMP"
  32. #include <platform/ddp_info.h>
  33. #include <platform/ddp_log.h>
  34. #include <platform/ddp_path.h>
  35. #include <platform/ddp_dump.h>
  36. #include <platform/disp_drv_platform.h>
  37. #include "platform/ddp_reg.h"
  38. #include <platform/ddp_dsi.h>
  39. #include <platform/ddp_rdma.h>
  40. #include <platform/ddp_ovl.h>
  41. #include <platform/ddp_postmask.h>
  42. #include <string.h>
  43. static const char* ddp_signal[5][32] = {
  44. {
  45. "aal0__to__gamma0",
  46. "ccorr0__to__aal0",
  47. "color0__to__disp_color_out_sel_in0",
  48. "disp_color_out_sel__to__ccorr0",
  49. "dither0__to__dither0_mout",
  50. "dither0_mout0__to__dsi0_sel_in0",
  51. "dither0_mout1__to__dpi_sel_in2",
  52. "dither0_mout2__to__disp_wdma0_pre_sel_in1",
  53. "disp_gamma0__to__disp_postmask",
  54. "disp_ovl0_2l_mout_out0__to__disp_path0_sel_in1",
  55. "disp_ovl0_2l_mout_out1__to__ovl_to_wrot_sel_in1",
  56. "disp_ovl0_2l_mout_out2__to__ovl_to_wdma_sel_in1",
  57. "disp_ovl0_2l_mout_out3__to__ovl_to_rsz_sel_in1",
  58. "disp_ovl0_2l_mout_out4__to__disp_rsz_sel_in5",
  59. "disp_ovl0_2l_out0__to__disp_ovl0_2l_mout",
  60. "disp_ovl0_2l_out1__to__disp_ovl0_2l_wcg_mout",
  61. "disp_ovl0_2l_out2__to__disp_rsz_sel_in1",
  62. "disp_ovl0_2l_sel__to__disp_ovl0_2l_in1",
  63. "disp_ovl0_2l_wcg_mout_out0__to__disp_ovl0_wcg_sel_in0",
  64. "disp_ovl0_2l_wcg_mout_out1__to__disp_ovl1_2l_wcg_sel_in1",
  65. "disp_ovl0_2l_wcg_sel__to__disp_ovl0_2l_in0",
  66. "disp_ovl0_mout_out0__to__disp_path0_sel_in0",
  67. "disp_ovl0_mout_out1__to__ovl_to_wrot_sel_in0",
  68. "disp_ovl0_mout_out2__to__ovl_to_wdma_sel_in0",
  69. "disp_ovl0_mout_out3__to__ovl_to_rsz_sel_in0",
  70. "disp_ovl0_mout_out4__to__disp_rsz_sel_in4",
  71. "disp_ovl0_out0__to__disp_ovl0_mout",
  72. "disp_ovl0_out1__to__disp_ovl0_wcg_mout",
  73. "disp_ovl0_out2__to__disp_rsz_sel_in0",
  74. "disp_ovl0_sel__to__disp_ovl0_in1",
  75. "disp_ovl0_wcg_mout_out0__to__disp_ovl0_2l_wcg_sel_in0",
  76. "disp_ovl0_wcg_mout_out1__to__disp_ovl1_2l_wcg_sel_in0",
  77. },
  78. {
  79. "disp_ovl0_wcg_sel__to__disp_ovl0_in0",
  80. "disp_ovl1_2l_mout_out0__to__disp_path0_sel_in2",
  81. "disp_ovl1_2l_mout_out1__to__ovl_to_wrot_sel_in2",
  82. "disp_ovl1_2l_mout_out2__to__ovl_to_wdma_sel_in2",
  83. "disp_ovl1_2l_mout_out3__to__ovl_to_rsz_sel_in2",
  84. "disp_ovl1_2l_mout_out4__to__disp_rdma1",
  85. "disp_ovl1_2l_mout_out5__to__disp_rsz_sel_in6",
  86. "disp_ovl1_2l_out0__to__disp_ovl1_2l_mout",
  87. "disp_ovl1_2l_out1__to__disp_ovl1_2l_wcg_mout",
  88. "disp_ovl1_2l_out2__to__disp_rsz_sel_in2",
  89. "disp_ovl1_2l_wcg_mout_out0__to__disp_ovl0_2l_wcg_sel_in0",
  90. "disp_ovl1_2l_wcg_mout_out1__to__disp_ovl0_wcg_sel_in1",
  91. "disp_ovl1_2l_wcg_sel__to__disp_ovl1_2l_in0",
  92. "disp_path0_sel__to__disp_rdma0",
  93. "disp_postmask0__to__disp_dither0",
  94. "disp_rdma0__to__disp_rdma0_rsz_in_sout",
  95. "disp_rdma0_rsz_in_sout_out0__to__disp_rdma0_rsz_out_sel_in0",
  96. "disp_rdma0_rsz_in_sout_out1__to__disp_rsz_sel_in3",
  97. "disp_rdma0_esz_out_sel__to__disp_rdma0_sout",
  98. "disp_rdma0_sout_out0__to__dsi0_sel_in1",
  99. "disp_rdma0_sout_out1__to__disp_color0",
  100. "disp_rdma0_sout_out2__to__disp_color_out_sel_in1",
  101. "disp_rdma0_sout_out3__to__dpi0_sel_in0",
  102. "disp_rdma1__to__disp_rdma1_sout",
  103. "disp_rdma1_sout_out0__to__dpi0_sel_in1",
  104. "disp_rdma1_sout_out1__to__dsi0_sel_in2",
  105. "disp_rsz0__to__disp_rsz_mout",
  106. "disp_rsz_mout_out0__to__disp_ovl0_in2",
  107. "disp_rsz_mout_out1__to__disp_ovl0_2l_in2",
  108. "disp_rsz_mout_out2__to__disp_ovl1_2l_in2",
  109. "disp_rsz_mout_out3__to__disp_path0_sel_in3",
  110. "disp_rsz_mout_out4__to__ovl_to_wdma_sel_in3",
  111. },
  112. {
  113. "disp_rsz_mout_out5__to__disp_rdma0_rsz_out_sel_in3",
  114. "disp_rsz_mout_out6__to__ovl_to_wrot_sel_in3",
  115. "disp_rsz_sel__to__disp_rsz0",
  116. "disp_to_wrot_sout_out0__to__mdp_wrot0_sel_in1",
  117. "disp_to_wrot_sout_out1__to__mdp_wrot1_sel_in1",
  118. "disp_wdma0_pre_sel__to__disp_wdma0_sel_in3",
  119. "disp_wdma0_sel__to__disp_wdma0",
  120. "dpi0_sel__to__dpi0_thp_lmt",
  121. "dpi0_thp_lmt__to__dpi0",
  122. "dsi0_sel__to__dsi0_thp_lmt",
  123. "dsi0_thp_lmt__to__dsi0",
  124. "ipu_mout_out0__to__mdp_hdr_sel_in3",
  125. "ipu_mout_out1__to__mdp_rsz1_sel_in4",
  126. "ipu_mout_out2__to__mdp_aal_sel_in2",
  127. "isp_mout_out0__to__mdp_hdr_sel_in0",
  128. "isp_mout_out1__to__mdp_rsz1_sel_in0",
  129. "isp_mout_out2__to__mdp_aal_sel_in0",
  130. "mdp_aal0__to__mdp_aal_mout",
  131. "mdp_aal_mout_out0__to__mdp_hdr_sel_in4",
  132. "mdp_aal_mout_out1__to__mdp_rsz1_sel_in5",
  133. "mdp_aal_mout_out2__to__mdp_rsz0_sel_in0",
  134. "mdp_aal_sel__to__mdp_aal0",
  135. "mdp_hdr_sel__to__mdp_hdr0",
  136. "mdp_hdr_sout_out0__to__mdp_aal_sel_in3",
  137. "mdp_hdr_sout_out1__to__mdp_rsz0_sel_in1",
  138. "mdp_color0__to__mdp_color_out_sel_in1",
  139. "mdp_color_in_sout_out0__to__mdp_color_out_sel_in0",
  140. "mdp_color_in_sout_out1__to__mdp_color0",
  141. "mdp_color_mout_out0__to__mdp_path0_sel_in2",
  142. "mdp_color_mout_out1__to__mdp_path1_sel_in1",
  143. "mdp_color_mout_out2__to__disp_wdma0_sel_in0",
  144. "mdp_color_out_sel__to__mdp_color_mout",
  145. },
  146. {
  147. "mdp_color_sel__to__mdp_color_in_sout",
  148. "mdp_dl_async__to__isp_mout",
  149. "mdp_dl_async_ipu__to__ipu_mout",
  150. "mdp_dl_relay__to__mdp_dl_async",
  151. "mdp_dl_relay_ipu__to__mdp_dl_async_ipu",
  152. "mdp_hdr0__to__mdp_hdr_sout",
  153. "mdp_path0_sel__to__mdp_path0_sout",
  154. "mdp_path0_sout_out0__to__mdp_mdp_wrot0_sel_in0",
  155. "mdp_path0_sout_out1__to__mdp_to_disp0_sout",
  156. "mdp_path1_sel__to__mdp_path1_sout",
  157. "mdp_path1_sout_out0__to__mdp_mdp_wrot1_sel_in0",
  158. "mdp_path1_sout_out1__to__mdp_to_disp1_sout",
  159. "mdp_rdma0__to__mdp_rdma0_mout",
  160. "mdp_rdma0_mout_out0__to__mdp_hdr_sel_in1",
  161. "mdp_rdma0_mout_out1__to__mdp_rsz1_sel_in1",
  162. "mdp_rdma0_mout_out2__to__mdp_path0_sel_in3",
  163. "mdp_rdma0_mout_out3__to__mdp_aal_sel_in1",
  164. "mdp_rdma1__to__mdp_rdma1_mout",
  165. "mdp_rdma1_mout_out0__to__mdp_hdr_sel_in2",
  166. "mdp_rdma1_mout_out1__to__mdp_rsz1_sel_in2",
  167. "mdp_rdma1_mout_out2__to__mdp_path1_sel_in2",
  168. "mdp_rdma1_mout_out3__to__disp_wdma0_sel_in2",
  169. "mdp_rsz0__to__mdp_rsz0_mout",
  170. "mdp_rsz0_mout_out0__to__mdp_path0_sel_in0",
  171. "mdp_rsz0_mout_out1__to__mdp_tdshlp_sel_in0",
  172. "mdp_rsz0_sel__to__mdp_rsz0",
  173. "mdp_rsz1__to__mdp_rsz1_mout",
  174. "mdp_rsz1_mout_out0__to__mdp_path0_sel_in1",
  175. "mdp_rsz1_mout_out1__to__mdp_tdshp_sel_in1",
  176. "mdp_rsz1_mout_out2__to__mdp_path1_sel_in0",
  177. "mdp_rsz1_mout_out3__to__disp_wdma0_sel_in1",
  178. "mdp_rsz1_mout_out4__to__mdp_color_sel_in1",
  179. },
  180. {
  181. "mdp_rsz1_sel__to__mdp_rsz1",
  182. "mdp_tdshp0__to__mdp_color_sel_in0",
  183. "mdp_tdshp_sel__to__ndp_tdshp0",
  184. "mdp_to_disp0_sout_out0__to__disp_ovl0_sel_in0",
  185. "mdp_to_disp0_sout_out1__to__disp_ovl0_2l_sel_in0",
  186. "mdp_to_disp1_sout_out0__to__disp_ovl0_2l_sel_in1",
  187. "mdp_to_disp1_sout_out1__to__disp_ovl1_2l_sel_in1",
  188. "mdp_to_disp1_sout_out2__to__disp_ovl0_sel_in1",
  189. "mdp_wrot0_sel__to__mdp_wrot0",
  190. "mdp_wrot1_sel__to__mdp_wrot1",
  191. "mmsys_r2y__to__mdp_rsz1_sel_in3",
  192. "ovl_to_r2y_sel__to__disp_wdma0_pre_sel_in0",
  193. "ovl_to_wdma_sel__to__disp_wdma0_pre_sel_in0",
  194. "ovl_to_wrot_sel__to__disp_to_wrot_sout",
  195. }
  196. };
  197. static char *ddp_greq_name(int bit)
  198. {
  199. switch (bit) {
  200. case 0:
  201. return "OVL0";
  202. case 1:
  203. return "OVL0_2L";
  204. case 2:
  205. return "RDMA0";
  206. case 3:
  207. return "WDMA0";
  208. case 4:
  209. return "MDP_RDMA0";
  210. case 5:
  211. return "MDP_WDMA";
  212. case 6:
  213. return "MDP_WROT0";
  214. case 16:
  215. return "OVL1";
  216. case 17:
  217. return "OVL1_2L";
  218. case 18:
  219. return "RDMA1";
  220. case 19:
  221. return "RDMA2";
  222. case 20:
  223. return "WDMA1";
  224. case 21:
  225. return "OD_R";
  226. case 22:
  227. return "OD_W";
  228. case 23:
  229. return "OVL0_2L_LARB4";
  230. case 26:
  231. return "WMDA0_LARB5";
  232. default:
  233. return NULL;
  234. }
  235. }
  236. static char *ddp_get_mutex_module0_name(unsigned int bit)
  237. {
  238. switch (bit) {
  239. case 0: return "rdma0";
  240. case 1: return "rdma1";
  241. case 2: return "mdp_rdma0";
  242. case 4: return "mdp_rsz0";
  243. case 5: return "mdp_rsz1";
  244. case 6: return "mdp_tdshp";
  245. case 7: return "mdp_wrot0";
  246. case 8: return "mdp_wrot1";
  247. case 9: return "ovl0";
  248. case 10: return "ovl0_2L";
  249. case 11: return "ovl1_2L";
  250. case 12: return "wdma0";
  251. case 13: return "color0";
  252. case 14: return "ccorr0";
  253. case 15: return "aal0";
  254. case 16: return "gamma0";
  255. case 17: return "dither0";
  256. case 18: return "PWM0";
  257. case 19: return "DSI";
  258. case 20: return "DPI";
  259. case 21: return "postmask";
  260. case 22: return "rsz";
  261. default: return "mutex-unknown";
  262. }
  263. }
  264. static char *ddp_get_mutex_module1_name(unsigned int bit)
  265. {
  266. switch (bit) {
  267. case 0: return "pwm";
  268. case 1: return "dsi0";
  269. case 2: return "dsi1";
  270. default:
  271. return "mutex-unknown";
  272. }
  273. }
  274. char *ddp_get_fmt_name(DISP_MODULE_ENUM module, unsigned int fmt)
  275. {
  276. if (module == DISP_MODULE_WDMA0) {
  277. switch (fmt) {
  278. case 0:
  279. return "rgb565";
  280. case 1:
  281. return "rgb888";
  282. case 2:
  283. return "rgba8888";
  284. case 3:
  285. return "argb8888";
  286. case 4:
  287. return "uyvy";
  288. case 5:
  289. return "yuy2";
  290. case 7:
  291. return "y-only";
  292. case 8:
  293. return "iyuv";
  294. case 12:
  295. return "nv12";
  296. default:
  297. DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
  298. return "unknown";
  299. }
  300. } else if (module == DISP_MODULE_OVL0) {
  301. switch (fmt) {
  302. case 0:
  303. return "rgb565";
  304. case 1:
  305. return "rgb888";
  306. case 2:
  307. return "rgba8888";
  308. case 3:
  309. return "argb8888";
  310. case 4:
  311. return "uyvy";
  312. case 5:
  313. return "yuyv";
  314. default:
  315. DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
  316. return "unknown";
  317. }
  318. } else if (module == DISP_MODULE_RDMA0 || module == DISP_MODULE_RDMA1 || module == DISP_MODULE_RDMA2) {
  319. switch (fmt) {
  320. case 0:
  321. return "rgb565";
  322. case 1:
  323. return "rgb888";
  324. case 2:
  325. return "rgba8888";
  326. case 3:
  327. return "argb8888";
  328. case 4:
  329. return "uyvy";
  330. case 5:
  331. return "yuyv";
  332. default:
  333. DDPDUMP("ddp_get_fmt_name, unknown fmt=%d, module=%d\n", fmt, module);
  334. return "unknown";
  335. }
  336. } else {
  337. DDPDUMP("ddp_get_fmt_name, unknown module=%d\n", module);
  338. }
  339. return "unknown";
  340. }
  341. static char *ddp_clock_0(int bit)
  342. {
  343. switch (bit) {
  344. case 0:
  345. return "smi_common(cg), ";
  346. case 1:
  347. return "smi_larb0(cg), ";
  348. case 2:
  349. return "smi_larb1(cg), ";
  350. case 19:
  351. return "fake_engine, ";
  352. case 20:
  353. return "ovl0, ";
  354. case 21:
  355. return "ovl0_2L, ";
  356. case 22:
  357. return "ovl1_2L, ";
  358. case 23:
  359. return "rdma0, ";
  360. case 24:
  361. return "rdma1, ";
  362. case 25:
  363. return "wdma0, ";
  364. case 26:
  365. return "color, ";
  366. case 27:
  367. return "ccorr, ";
  368. case 28:
  369. return "aal, ";
  370. case 29:
  371. return "gamma, ";
  372. case 30:
  373. return "dither, ";
  374. case 31:
  375. return "split, ";
  376. default:
  377. return NULL;
  378. }
  379. }
  380. static char *ddp_clock_1(int bit)
  381. {
  382. switch (bit) {
  383. case 0:
  384. return "dsi0_mm(cg), ";
  385. case 1:
  386. return "dsi0_interface(cg), ";
  387. case 2:
  388. return "dsi1_mm(cg), ";
  389. case 3:
  390. return "dsi1_interface(cg), ";
  391. case 4:
  392. return "fake_engine2, ";
  393. case 7:
  394. return "26m, ";
  395. case 8:
  396. return "mmsys_r2y, ";
  397. case 9:
  398. return "disp_rsz, ";
  399. default:
  400. return NULL;
  401. }
  402. }
  403. static void mutex_dump_reg(void)
  404. {
  405. DDPDUMP("==DISP MUTEX REGS==\n");
  406. DDPDUMP("(0x000)M_INTEN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTEN));
  407. DDPDUMP("(0x004)M_INTSTA =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_INTSTA));
  408. DDPDUMP("(0x020)M0_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_EN));
  409. /*DDPDUMP("(0x024)M0_GET =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_GET));*/
  410. DDPDUMP("(0x028)M0_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_RST));
  411. DDPDUMP("(0x02c)M0_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_SOF));
  412. DDPDUMP("(0x030)M0_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_MOD0));
  413. /*DDPDUMP("(0x034)M0_MOD1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX0_MOD1));*/
  414. DDPDUMP("(0x040)M1_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_EN));
  415. /*DDPDUMP("(0x044)M1_GET =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_GET));*/
  416. DDPDUMP("(0x048)M1_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_RST));
  417. DDPDUMP("(0x04c)M1_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_SOF));
  418. DDPDUMP("(0x050)M1_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_MOD0));
  419. /*DDPDUMP("(0x054)M1_MOD1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX1_MOD1));*/
  420. DDPDUMP("(0x060)M2_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_EN));
  421. /*DDPDUMP("(0x064)M2_GET =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_GET));*/
  422. DDPDUMP("(0x068)M2_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_RST));
  423. DDPDUMP("(0x06c)M2_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_SOF));
  424. DDPDUMP("(0x070)M2_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_MOD0));
  425. /*DDPDUMP("(0x074)M2_MOD1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX2_MOD1));*/
  426. DDPDUMP("(0x080)M3_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_EN));
  427. /*DDPDUMP("(0x084)M3_GET =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_GET));*/
  428. DDPDUMP("(0x088)M3_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_RST));
  429. DDPDUMP("(0x08C)M3_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_SOF));
  430. DDPDUMP("(0x090)M3_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_MOD0));
  431. /*DDPDUMP("(0x090)M3_MOD1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX3_MOD1));*/
  432. DDPDUMP("(0x0a0)M4_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_EN));
  433. /*DDPDUMP("(0x0a4)M4_GET =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_GET));*/
  434. DDPDUMP("(0x0a8)M4_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_RST));
  435. DDPDUMP("(0x0ac)M4_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_SOF));
  436. DDPDUMP("(0x0b0)M4_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_MOD0));
  437. /*DDPDUMP("(0x0b4)M4_MOD1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX4_MOD1));*/
  438. DDPDUMP("(0x0c0)M5_EN =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_EN));
  439. /*DDPDUMP("(0x0c4)M5_GET =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_GET));*/
  440. DDPDUMP("(0x0c8)M5_RST =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_RST));
  441. DDPDUMP("(0x0cc)M5_SOF =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_SOF));
  442. DDPDUMP("(0x0d0)M5_MOD0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_MOD0));
  443. /* DDPDUMP("(0x0d4)M5_MOD1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX5_MOD1));
  444. DDPDUMP("(0x300)DISP_REG_CONFIG_MUTEX_DUMMY0 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_DUMMY0));
  445. DDPDUMP("(0x304)DISP_REG_CONFIG_MUTEX_DUMMY1 =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MUTEX_DUMMY1));
  446. */
  447. DDPDUMP("(0x30c)DEBUG_OUT_SEL =0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DEBUG_OUT_SEL));
  448. return;
  449. }
  450. static void mutex_dump_analysis(void)
  451. {
  452. int i = 0;
  453. int j = 0;
  454. char mutex_module[512] = { '\0' };
  455. char *p = NULL;
  456. int len = 0;
  457. unsigned int val;
  458. DDPDUMP("== DISP Mutex Analysis ==\n");
  459. for (i = 0; i < 5; i++) {
  460. p = mutex_module;
  461. len = 0;
  462. if (DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD0(i)) == 0)
  463. continue;
  464. val = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_SOF(i));
  465. len = sprintf(p, "MUTEX%d :SOF=%s,EOF=%s,WAIT=%d,module=(",
  466. i,
  467. ddp_get_mutex_sof_name(REG_FLD_VAL_GET(SOF_FLD_MUTEX0_SOF, val)),
  468. ddp_get_mutex_sof_name(REG_FLD_VAL_GET(SOF_FLD_MUTEX0_EOF, val)),
  469. REG_FLD_VAL_GET(SOF_FLD_MUTEX0_SOF_WAIT, val));
  470. p += len;
  471. for (j = 0; j < 32; j++) {
  472. unsigned int regval = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD0(i));
  473. if ((regval & (1 << j))) {
  474. len = sprintf(p, "%s,", ddp_get_mutex_module0_name(j));
  475. p += len;
  476. }
  477. }
  478. /* for (j = 0; j < 32; j++) {
  479. unsigned int regval = DISP_REG_GET(DISP_REG_CONFIG_MUTEX_MOD1(i));
  480. if ((regval & (1 << j))) {
  481. len = sprintf(p, "%s,", ddp_get_mutex_module1_name(j));
  482. p += len;
  483. }
  484. }
  485. */
  486. DDPDUMP("%s)\n", mutex_module);
  487. }
  488. }
  489. static void mmsys_config_dump_reg(void)
  490. {
  491. DDPDUMP("== DISP MMSYS_Config REGS ==\n");
  492. DDPDUMP("MMSYS_INTEN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTEN));
  493. DDPDUMP("MMSYS_INTSTA=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_INTSTA));
  494. DDPDUMP("OVL0_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL0_MOUT_EN));
  495. DDPDUMP("OVL0_2L_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL0_2L_MOUT_EN));
  496. DDPDUMP("OVL1_2L_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_OVL1_2L_MOUT_EN));
  497. DDPDUMP("DITHER_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DITHER0_MOUT_EN));
  498. DDPDUMP("RSZ_MOUT_EN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RSZ_MOUT_EN));
  499. DDPDUMP("MMSYS_MOUT_RST=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MOUT_RST));
  500. DDPDUMP("COLOR0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_COLOR_OUT_SEL_IN));
  501. DDPDUMP("WDMA0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_WDMA0_SEL_IN));
  502. DDPDUMP("DSI0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DSI0_SEL_IN));
  503. DDPDUMP("DPI0_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DPI0_SEL_IN));
  504. DDPDUMP("DISP_PATH_SOUT_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_PATH0_SEL_IN));
  505. DDPDUMP("RDMA0_SOUT_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RDMA0_SOUT_SEL_IN));
  506. DDPDUMP("RDMA1_SOUT_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_RDMA1_SOUT_SEL_IN));
  507. DDPDUMP("WDMA0_SOUT_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_OVL_TO_WDMA_SEL_IN));
  508. DDPDUMP("OVL1_INT_SOUT_SIN=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_OVL_TO_WDMA_SEL_IN));
  509. DDPDUMP("MM_MISC=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_MISC));
  510. DDPDUMP("MM_CG_CON0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0));
  511. DDPDUMP("MM_CG_CON1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
  512. DDPDUMP("MM_HW_DCM_DIS0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_DIS0));
  513. DDPDUMP("MM_HW_DCM_DIS1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_HW_DCM_DIS1));
  514. DDPDUMP("MM_SW0_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW0_RST_B));
  515. DDPDUMP("MM_SW1_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_SW1_RST_B));
  516. DDPDUMP("MM_LCM_RST_B=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_LCM_RST_B));
  517. DDPDUMP("MM_DBG_OUT_SEL=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DEBUG_OUT_SEL));
  518. DDPDUMP("MM_DUMMY0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY0));
  519. DDPDUMP("MM_DUMMY1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY1));
  520. DDPDUMP("MM_DUMMY2=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY2));
  521. DDPDUMP("MM_DUMMY3=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_MMSYS_DUMMY3));
  522. DDPDUMP("DISP_VALID_0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0));
  523. DDPDUMP("DISP_VALID_1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1));
  524. DDPDUMP("DISP_READY_0=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0));
  525. DDPDUMP("DISP_READY_1=0x%x\n", DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1));
  526. }
  527. /* ------ clock:
  528. Before power on mmsys:
  529. CLK_CFG_0_CLR (address is 0x10000048) = 0x80000000 (bit 31).
  530. Before using DISP_PWM0 or DISP_PWM1:
  531. CLK_CFG_1_CLR(address is 0x10000058)=0x80 (bit 7).
  532. Before using DPI pixel clock:
  533. CLK_CFG_6_CLR(address is 0x100000A8)=0x80 (bit 7).
  534. Only need to enable the corresponding bits of MMSYS_CG_CON0 and MMSYS_CG_CON1 for the modules:
  535. smi_common, larb0, mdp_crop, fake_eng, mutex_32k, pwm0, pwm1, dsi0, dsi1, dpi.
  536. Other bits could keep 1. Suggest to keep smi_common and larb0 always clock on.
  537. --------valid & ready
  538. example:
  539. ovl0 -> ovl0_mout_ready=1 means engines after ovl_mout are ready for receiving data
  540. ovl0_mout_ready=0 means ovl0_mout can not receive data, maybe ovl0_mout or after engines config error
  541. ovl0 -> ovl0_mout_valid=1 means engines before ovl0_mout is OK,
  542. ovl0_mout_valid=0 means ovl can not transfer data to ovl0_mout, means ovl0 or before engines are not ready.
  543. */
  544. static void mmsys_config_dump_analysis(void)
  545. {
  546. unsigned int i = 0, j;
  547. unsigned int reg = 0;
  548. char clock_on[512] = { '\0' };
  549. char *pos = NULL;
  550. const char *name;
  551. /* int len = 0; */
  552. unsigned int valid[5], ready[5];
  553. unsigned int greq;
  554. valid[0] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_0);
  555. valid[1] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_1);
  556. valid[2] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_2);
  557. valid[3] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_3);
  558. valid[4] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_VALID_4);
  559. ready[0] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_0);
  560. ready[1] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_1);
  561. ready[2] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_2);
  562. ready[3] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_3);
  563. ready[4] = DISP_REG_GET(DISP_REG_CONFIG_DISP_DL_READY_4);
  564. greq = DISP_REG_GET(DISP_REG_CONFIG_SMI_LARB_GREQ);
  565. DDPDUMP("== DISP MMSYS_CONFIG ANALYSIS ==\n");
  566. #if 0 /* TODO: mmsys clk?? */
  567. DDPDUMP("mmsys clock=0x%x, CG_CON0=0x%x, CG_CON1=0x%x\n",
  568. DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK),
  569. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0),
  570. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
  571. if ((DISP_REG_GET(DISP_REG_CLK_CFG_0_MM_CLK) >> 31) & 0x1)
  572. DDPERR("mmsys clock abnormal!!\n");
  573. #endif
  574. DDPDUMP("MMSYS_CG_CON0: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON0));
  575. DDPDUMP("MMSYS_CG_CON1: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON1));
  576. reg = DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0);
  577. for (i = 0; i < 32; i++) {
  578. if ((reg & (1 << i)) == 0) {
  579. name = ddp_clock_0(i);
  580. if (name)
  581. strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
  582. }
  583. }
  584. reg = DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1);
  585. for (i = 0; i < 32; i++) {
  586. if ((reg & (1 << i)) == 0) {
  587. name = ddp_clock_1(i);
  588. if (name)
  589. strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
  590. }
  591. }
  592. DDPDUMP("clock on modules:%s\n", clock_on);
  593. DDPDUMP("valid0=0x%x,valid1=0x%x,valid2=0x%x,ready0=0x%x,ready1=0x%x,ready2=0x%x,greq=0%x\n",
  594. valid[0], valid[1], valid[2], ready[0], ready[1], ready[2], greq);
  595. for (j = 0; j < ARRAY_SIZE(valid); j++) {
  596. for (i = 0; i < 32; i++) {
  597. name = ddp_signal[j][i];
  598. if (!name)
  599. continue;
  600. pos = clock_on;
  601. if ((valid[j] & (1 << i)))
  602. pos += snprintf(pos, (sizeof(clock_on) - strlen(clock_on) - 1), "%s,", "v");
  603. else
  604. pos += snprintf(pos, (sizeof(clock_on) - strlen(clock_on) - 1), "%s,", "n");
  605. if ((ready[j] & (1 << i)))
  606. pos += snprintf(pos, (sizeof(clock_on) - strlen(clock_on) - 1), "%s", "r");
  607. else
  608. pos += snprintf(pos, (sizeof(clock_on) - strlen(clock_on) - 1), "%s", "n");
  609. pos += snprintf(pos, (sizeof(clock_on) - strlen(clock_on) - 1), ": %s", name);
  610. DDPDUMP("%s\n", clock_on);
  611. }
  612. }
  613. /* greq: 1 means SMI dose not grant, maybe SMI hang */
  614. if (greq)
  615. DDPDUMP("smi greq not grant module: (greq: 1 means SMI dose not grant, maybe SMI hang)");
  616. clock_on[0] = '\0';
  617. for (i = 0; i < 32; i++) {
  618. if (greq & (1 << i)) {
  619. name = ddp_greq_name(i);
  620. if (!name)
  621. continue;
  622. strncat(clock_on, name, (sizeof(clock_on) - strlen(clock_on) - 1));
  623. }
  624. }
  625. DDPDUMP("%s\n", clock_on);
  626. }
  627. static void gamma_dump_reg(void)
  628. {
  629. DDPDUMP("== DISP GAMMA REGS ==\n");
  630. DDPDUMP("(0x000)GA_EN=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_EN));
  631. DDPDUMP("(0x004)GA_RESET=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_RESET));
  632. DDPDUMP("(0x008)GA_INTEN=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTEN));
  633. DDPDUMP("(0x00c)GA_INTSTA=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INTSTA));
  634. DDPDUMP("(0x010)GA_STATUS=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_STATUS));
  635. DDPDUMP("(0x020)GA_CFG=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CFG));
  636. DDPDUMP("(0x024)GA_IN_COUNT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT));
  637. DDPDUMP("(0x028)GA_OUT_COUNT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT));
  638. DDPDUMP("(0x02c)GA_CHKSUM=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_CHKSUM));
  639. DDPDUMP("(0x030)GA_SIZE=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_SIZE));
  640. DDPDUMP("(0x0c0)GA_DUMMY_REG=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_DUMMY_REG));
  641. DDPDUMP("(0x800)GA_LUT=0x%x\n", DISP_REG_GET(DISP_REG_GAMMA_LUT));
  642. }
  643. static void gamma_dump_analysis(void)
  644. {
  645. DDPDUMP("== DISP GAMMA ANALYSIS ==\n");
  646. DDPDUMP("gamma: en=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  647. DISP_REG_GET(DISP_REG_GAMMA_EN),
  648. (DISP_REG_GET(DISP_REG_GAMMA_SIZE) >> 16) & 0x1fff,
  649. DISP_REG_GET(DISP_REG_GAMMA_SIZE) & 0x1fff,
  650. DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT) & 0x1fff,
  651. (DISP_REG_GET(DISP_REG_GAMMA_INPUT_COUNT) >> 16) & 0x1fff,
  652. DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT) & 0x1fff,
  653. (DISP_REG_GET(DISP_REG_GAMMA_OUTPUT_COUNT) >> 16) & 0x1fff);
  654. }
  655. static void color_dump_reg(DISP_MODULE_ENUM module)
  656. {
  657. int index = 0;
  658. if (DISP_MODULE_COLOR0 == module) {
  659. index = 0;
  660. } else if (DISP_MODULE_COLOR1 == module) {
  661. DDPDUMP("error: DISP COLOR%d dose not exist!\n", index);
  662. return;
  663. }
  664. DDPDUMP("== DISP COLOR%d REGS ==\n", index);
  665. DDPDUMP("(0x400)COLOR_CFG_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_CFG_MAIN));
  666. DDPDUMP("(0x404)COLOR_PXL_CNT_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN));
  667. DDPDUMP("(0x408)COLOR_LINE_CNT_MAIN=0x%x\n", DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN));
  668. DDPDUMP("(0xc00)COLOR_START=0x%x\n", DISP_REG_GET(DISP_COLOR_START));
  669. DDPDUMP("(0xc28)DISP_COLOR_CK_ON=0x%x\n", DISP_REG_GET(DISP_COLOR_CK_ON));
  670. DDPDUMP("(0xc50)COLOR_INTER_IP_W=0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH));
  671. DDPDUMP("(0xc54)COLOR_INTER_IP_H=0x%x\n", DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT));
  672. return;
  673. }
  674. static void color_dump_analysis(DISP_MODULE_ENUM module)
  675. {
  676. int index = 0;
  677. if (DISP_MODULE_COLOR0 == module) {
  678. index = 0;
  679. } else if (DISP_MODULE_COLOR1 == module) {
  680. DDPDUMP("error: DISP COLOR%d dose not exist!\n", index);
  681. return;
  682. }
  683. DDPDUMP("== DISP COLOR%d ANALYSIS ==\n", index);
  684. DDPDUMP("color%d: bypass=%d, w=%d, h=%d, pixel_cnt=%d, line_cnt=%d,\n",
  685. index,
  686. (DISP_REG_GET(DISP_COLOR_CFG_MAIN) >> 7) & 0x1,
  687. DISP_REG_GET(DISP_COLOR_INTERNAL_IP_WIDTH),
  688. DISP_REG_GET(DISP_COLOR_INTERNAL_IP_HEIGHT),
  689. DISP_REG_GET(DISP_COLOR_PXL_CNT_MAIN) & 0xffff,
  690. (DISP_REG_GET(DISP_COLOR_LINE_CNT_MAIN) >> 16) & 0x1fff);
  691. return;
  692. }
  693. static void aal_dump_reg(void)
  694. {
  695. DDPDUMP("== DISP AAL REGS ==\n");
  696. DDPDUMP("(0x000)AAL_EN=0x%x\n", DISP_REG_GET(DISP_AAL_EN));
  697. DDPDUMP("(0x008)AAL_INTEN=0x%x\n", DISP_REG_GET(DISP_AAL_INTEN));
  698. DDPDUMP("(0x00c)AAL_INTSTA=0x%x\n", DISP_REG_GET(DISP_AAL_INTSTA));
  699. DDPDUMP("(0x020)AAL_CFG=0x%x\n", DISP_REG_GET(DISP_AAL_CFG));
  700. DDPDUMP("(0x024)AAL_IN_CNT=0x%x\n", DISP_REG_GET(DISP_AAL_IN_CNT));
  701. DDPDUMP("(0x028)AAL_OUT_CNT=0x%x\n", DISP_REG_GET(DISP_AAL_OUT_CNT));
  702. DDPDUMP("(0x030)AAL_SIZE=0x%x\n", DISP_REG_GET(DISP_AAL_SIZE));
  703. DDPDUMP("(0x20c)AAL_CABC_00=0x%x\n", DISP_REG_GET(DISP_AAL_CABC_00));
  704. DDPDUMP("(0x214)AAL_CABC_02=0x%x\n", DISP_REG_GET(DISP_AAL_CABC_02));
  705. DDPDUMP("(0x20c)AAL_STATUS_00=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00));
  706. DDPDUMP("(0x210)AAL_STATUS_01=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_00 + 0x4));
  707. DDPDUMP("(0x2a0)AAL_STATUS_31=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32 - 0x4));
  708. DDPDUMP("(0x2a4)AAL_STATUS_32=0x%x\n", DISP_REG_GET(DISP_AAL_STATUS_32));
  709. DDPDUMP("(0x3b0)AAL_DRE_MAPPING_00=0x%x\n", DISP_REG_GET(DISP_AAL_DRE_MAPPING_00));
  710. return;
  711. }
  712. static void aal_dump_analysis(void)
  713. {
  714. DDPDUMP("== DISP AAL ANALYSIS ==\n");
  715. DDPDUMP("aal: bypass=%d, relay=%d, en=%d, w=%d, h=%d, in(%d,%d),out(%d,%d)\n",
  716. DISP_REG_GET(DISP_AAL_EN) == 0x0,
  717. DISP_REG_GET(DISP_AAL_CFG) & 0x01,
  718. DISP_REG_GET(DISP_AAL_EN),
  719. (DISP_REG_GET(DISP_AAL_SIZE) >> 16) & 0x1fff,
  720. DISP_REG_GET(DISP_AAL_SIZE) & 0x1fff,
  721. DISP_REG_GET(DISP_AAL_IN_CNT) & 0x1fff,
  722. (DISP_REG_GET(DISP_AAL_IN_CNT) >> 16) & 0x1fff,
  723. DISP_REG_GET(DISP_AAL_OUT_CNT) & 0x1fff,
  724. (DISP_REG_GET(DISP_AAL_OUT_CNT) >> 16) & 0x1fff);
  725. }
  726. static void pwm_dump_reg(DISP_MODULE_ENUM module)
  727. {
  728. int index = 0;
  729. unsigned long reg_base = 0;
  730. if (module == DISP_MODULE_PWM0) {
  731. index = 0;
  732. reg_base = DISPSYS_PWM0_BASE;
  733. } else {
  734. index = 1;
  735. reg_base = DISPSYS_PWM0_BASE;
  736. }
  737. DDPDUMP("== DISP PWM%d REGS ==\n", index);
  738. DDPDUMP("(0x000)PWM_EN=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_EN_OFF));
  739. DDPDUMP("(0x008)PWM_CON_0=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_0_OFF));
  740. DDPDUMP("(0x010)PWM_CON_1=0x%x\n", DISP_REG_GET(reg_base + DISP_PWM_CON_1_OFF));
  741. DDPDUMP("(0x028)PWM_DEBUG=0x%x\n", DISP_REG_GET(reg_base + 0x28));
  742. return;
  743. }
  744. static void pwm_dump_analysis(DISP_MODULE_ENUM module)
  745. {
  746. int index = 0;
  747. //unsigned int reg_base = 0;
  748. if (module == DISP_MODULE_PWM0) {
  749. index = 0;
  750. //reg_base = DISPSYS_PWM0_BASE;
  751. } else {
  752. index = 1;
  753. //reg_base = DISPSYS_PWM0_BASE;
  754. }
  755. DDPDUMP("== DISP PWM%d ANALYSIS ==\n", index);
  756. #if 0 /* TODO: clk reg?? */
  757. DDPDUMP("pwm clock=%d\n", (DISP_REG_GET(DISP_REG_CLK_CFG_1_CLR) >> 7) & 0x1);
  758. #endif
  759. return;
  760. }
  761. static void ccorr_dump_reg(void)
  762. {
  763. DDPDUMP("== DISP CCORR REGS ==\n");
  764. DDPDUMP("(00)EN=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_EN));
  765. DDPDUMP("(20)CFG=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_CFG));
  766. DDPDUMP("(24)IN_CNT=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_IN_CNT));
  767. DDPDUMP("(28)OUT_CNT=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_OUT_CNT));
  768. DDPDUMP("(30)SIZE=0x%x\n", DISP_REG_GET(DISP_REG_CCORR_SIZE));
  769. }
  770. static void ccorr_dump_analyze(void)
  771. {
  772. DDPDUMP("ccorr: en=%d, config=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  773. DISP_REG_GET(DISP_REG_CCORR_EN), DISP_REG_GET(DISP_REG_CCORR_CFG),
  774. (DISP_REG_GET(DISP_REG_CCORR_SIZE) >> 16) & 0x1fff,
  775. DISP_REG_GET(DISP_REG_CCORR_SIZE) & 0x1fff,
  776. DISP_REG_GET(DISP_REG_CCORR_IN_CNT) & 0x1fff,
  777. (DISP_REG_GET(DISP_REG_CCORR_IN_CNT) >> 16) & 0x1fff,
  778. DISP_REG_GET(DISP_REG_CCORR_IN_CNT) & 0x1fff,
  779. (DISP_REG_GET(DISP_REG_CCORR_IN_CNT) >> 16) & 0x1fff);
  780. }
  781. static void dither_dump_reg(void)
  782. {
  783. DDPDUMP("== DISP DITHER REGS ==\n");
  784. DDPDUMP("(00)EN=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_EN));
  785. DDPDUMP("(20)CFG=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_CFG));
  786. DDPDUMP("(24)IN_CNT=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_IN_CNT));
  787. DDPDUMP("(28)OUT_CNT=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_OUT_CNT));
  788. DDPDUMP("(30)SIZE=0x%x\n", DISP_REG_GET(DISP_REG_DITHER_SIZE));
  789. }
  790. static void dither_dump_analyze(void)
  791. {
  792. DDPDUMP("dither: en=%d, config=%d, w=%d, h=%d, in_p_cnt=%d, in_l_cnt=%d, out_p_cnt=%d, out_l_cnt=%d\n",
  793. DISP_REG_GET(DISPSYS_DITHER0_BASE + 0x000), DISP_REG_GET(DISPSYS_DITHER0_BASE + 0x020),
  794. (DISP_REG_GET(DISP_REG_DITHER_SIZE) >> 16) & 0x1fff,
  795. DISP_REG_GET(DISP_REG_DITHER_SIZE) & 0x1fff,
  796. DISP_REG_GET(DISP_REG_DITHER_IN_CNT) & 0x1fff,
  797. (DISP_REG_GET(DISP_REG_DITHER_IN_CNT) >> 16) & 0x1fff,
  798. DISP_REG_GET(DISP_REG_DITHER_OUT_CNT) & 0x1fff,
  799. (DISP_REG_GET(DISP_REG_DITHER_OUT_CNT) >> 16) & 0x1fff);
  800. }
  801. static void dsi_dump_reg(DISP_MODULE_ENUM module)
  802. {
  803. DSI_DumpRegisters(module, 1);
  804. #if 0
  805. if (DISP_MODULE_DSI0) {
  806. int i = 0;
  807. DDPDUMP("== DISP DSI0 REGS ==\n");
  808. for (i = 0; i < 25 * 16; i += 16) {
  809. DDPDUMP("DSI0+%04x: 0x%08x 0x%08x 0x%08x 0x%08x\n", i,
  810. INREG32(DISPSYS_DSI0_BASE + i), INREG32(DISPSYS_DSI0_BASE + i + 0x4),
  811. INREG32(DISPSYS_DSI0_BASE + i + 0x8),
  812. INREG32(DISPSYS_DSI0_BASE + i + 0xc));
  813. }
  814. DDPDUMP("DSI0 CMDQ+0x200: 0x%08x 0x%08x 0x%08x 0x%08x\n",
  815. INREG32(DISPSYS_DSI0_BASE + 0x200), INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x4),
  816. INREG32(DISPSYS_DSI0_BASE + 0x200 + 0x8),
  817. INREG32(DISPSYS_DSI0_BASE + 0x200 + 0xc));
  818. }
  819. #endif
  820. }
  821. static void dpi_dump_reg(void)
  822. {
  823. int i;
  824. DDPDUMP("-- Start dump DPI registers --\n");
  825. for (i = 0; i <= 0x40; i += 4)
  826. DDPDUMP("DPI+%04x: 0x%08x\n", i, INREG32(DISPSYS_DPI_BASE + i));
  827. for (i = 0x68; i <= 0x7C; i += 4)
  828. DDPDUMP("DPI+%04x: 0x%08x\n", i, INREG32(DISPSYS_DPI_BASE + i));
  829. DDPDUMP("DPI+Color Bar : 0x%04x : 0x%08x\n", 0xF00, INREG32(DISPSYS_DPI_BASE + 0xF00));
  830. DDPDUMP("DPI MMSYS_CG_CON0: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON0));
  831. DDPDUMP("DPI MMSYS_CG_CON1: 0x%08x\n", INREG32(DISP_REG_CONFIG_MMSYS_CG_CON1));
  832. }
  833. static void dpi_dump_analysis(void)
  834. {
  835. #if 0
  836. DDPDUMP("== DISP DPI ANALYSIS ==\n");
  837. /* TODO: mmsys clk?? */
  838. DDPDUMP("DPI clock=0x%x\n", DISP_REG_GET(DISP_REG_CLK_CFG_6_DPI));
  839. DDPDUMP("DPI clock_clear=%d\n", (DISP_REG_GET(DISP_REG_CLK_CFG_6_CLR) >> 7) & 0x1);
  840. #endif
  841. }
  842. int ddp_dump_reg(DISP_MODULE_ENUM module)
  843. {
  844. switch (module) {
  845. case DISP_MODULE_WDMA0:
  846. //wdma_dump_reg(module);
  847. break;
  848. case DISP_MODULE_RDMA0:
  849. case DISP_MODULE_RDMA1:
  850. case DISP_MODULE_RDMA2:
  851. RDMADump(module);
  852. break;
  853. case DISP_MODULE_OVL0:
  854. case DISP_MODULE_OVL1:
  855. case DISP_MODULE_OVL0_2L:
  856. case DISP_MODULE_OVL1_2L:
  857. OVLDump(module);
  858. break;
  859. case DISP_MODULE_GAMMA0:
  860. gamma_dump_reg();
  861. break;
  862. case DISP_MODULE_CONFIG:
  863. mmsys_config_dump_reg();
  864. break;
  865. case DISP_MODULE_MUTEX:
  866. mutex_dump_reg();
  867. break;
  868. case DISP_MODULE_COLOR0:
  869. case DISP_MODULE_COLOR1:
  870. color_dump_reg(module);
  871. break;
  872. case DISP_MODULE_AAL0:
  873. aal_dump_reg();
  874. break;
  875. case DISP_MODULE_PWM0:
  876. pwm_dump_reg(module);
  877. break;
  878. case DISP_MODULE_DSI0:
  879. case DISP_MODULE_DSI1:
  880. case DISP_MODULE_DSIDUAL:
  881. dsi_dump_reg(module);
  882. break;
  883. case DISP_MODULE_DPI:
  884. dpi_dump_reg();
  885. break;
  886. case DISP_MODULE_CCORR0:
  887. ccorr_dump_reg();
  888. break;
  889. case DISP_MODULE_DITHER0:
  890. dither_dump_reg();
  891. break;
  892. case DISP_MODULE_POSTMASK:
  893. postmask_dump_reg(module);
  894. break;
  895. default:
  896. DDPDUMP("no dump_reg for module %s(%d)\n", ddp_get_module_name(module), module);
  897. }
  898. return 0;
  899. }
  900. int ddp_dump_analysis(DISP_MODULE_ENUM module)
  901. {
  902. switch (module) {
  903. case DISP_MODULE_WDMA0:
  904. //wdma_dump_analysis(module);
  905. break;
  906. case DISP_MODULE_RDMA0:
  907. case DISP_MODULE_RDMA1:
  908. case DISP_MODULE_RDMA2:
  909. rdma_dump_analysis(module);
  910. break;
  911. case DISP_MODULE_OVL0:
  912. case DISP_MODULE_OVL1:
  913. case DISP_MODULE_OVL0_2L:
  914. case DISP_MODULE_OVL1_2L:
  915. ovl_dump_analysis(module);
  916. break;
  917. case DISP_MODULE_GAMMA0:
  918. gamma_dump_analysis();
  919. break;
  920. case DISP_MODULE_CONFIG:
  921. mmsys_config_dump_analysis();
  922. break;
  923. case DISP_MODULE_MUTEX:
  924. mutex_dump_analysis();
  925. break;
  926. case DISP_MODULE_COLOR0:
  927. case DISP_MODULE_COLOR1:
  928. color_dump_analysis(module);
  929. break;
  930. case DISP_MODULE_AAL0:
  931. aal_dump_analysis();
  932. break;
  933. case DISP_MODULE_PWM0:
  934. pwm_dump_analysis(module);
  935. break;
  936. case DISP_MODULE_DSI0:
  937. case DISP_MODULE_DSI1:
  938. case DISP_MODULE_DSIDUAL:
  939. dsi_analysis(module);
  940. break;
  941. case DISP_MODULE_DPI:
  942. dpi_dump_analysis();
  943. break;
  944. case DISP_MODULE_CCORR0:
  945. ccorr_dump_analyze();
  946. break;
  947. case DISP_MODULE_DITHER0:
  948. dither_dump_analyze();
  949. break;
  950. case DISP_MODULE_POSTMASK:
  951. postmask_dump_analysis(module);
  952. break;
  953. default:
  954. DDPDUMP("no dump_analysis for module %s(%d)\n", ddp_get_module_name(module),
  955. module);
  956. }
  957. return 0;
  958. }