ddp_dump.c 31 KB

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