ddp_mmp.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. #define LOG_TAG "MMP"
  2. #include "ddp_mmp.h"
  3. #include "ddp_reg.h"
  4. #include "ddp_log.h"
  5. #include "ddp_ovl.h"
  6. #include "m4u.h"
  7. #include "DpDataType.h"
  8. #include "ddp_debug.h"
  9. static DDP_MMP_Events_t DDP_MMP_Events;
  10. void init_ddp_mmp_events(void)
  11. {
  12. if (DDP_MMP_Events.DDP == 0) {
  13. DDP_MMP_Events.DDP = MMProfileRegisterEvent(MMP_RootEvent, "Display");
  14. DDP_MMP_Events.primary_Parent =
  15. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "primary_disp");
  16. DDP_MMP_Events.primary_trigger =
  17. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "trigger");
  18. DDP_MMP_Events.primary_config =
  19. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "ovl_config");
  20. DDP_MMP_Events.primary_rdma_config =
  21. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "rdma_config");
  22. DDP_MMP_Events.primary_wdma_config =
  23. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "wdma_config");
  24. DDP_MMP_Events.primary_set_dirty =
  25. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "set_dirty");
  26. DDP_MMP_Events.primary_cmdq_flush =
  27. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "cmdq_flush");
  28. DDP_MMP_Events.primary_cmdq_done =
  29. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "cmdq_done");
  30. DDP_MMP_Events.primary_display_cmd =
  31. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "display_io");
  32. DDP_MMP_Events.primary_suspend =
  33. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "suspend");
  34. DDP_MMP_Events.primary_resume =
  35. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "resume");
  36. DDP_MMP_Events.primary_cache_sync =
  37. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "cache_sync");
  38. DDP_MMP_Events.primary_wakeup =
  39. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "wakeup");
  40. DDP_MMP_Events.interface_trigger =
  41. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "interface_trigger");
  42. DDP_MMP_Events.primary_switch_mode =
  43. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "switch_session_mode");
  44. DDP_MMP_Events.primary_seq_insert =
  45. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "seq_insert");
  46. DDP_MMP_Events.primary_seq_config =
  47. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "seq_config");
  48. DDP_MMP_Events.primary_seq_trigger =
  49. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "seq_trigger");
  50. DDP_MMP_Events.primary_seq_rdma_irq =
  51. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "seq_rdma_irq");
  52. DDP_MMP_Events.primary_seq_release =
  53. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "seq_release");
  54. DDP_MMP_Events.primary_ovl_fence_release =
  55. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "ovl_fence_r");
  56. DDP_MMP_Events.primary_wdma_fence_release =
  57. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "wdma_fence_r");
  58. DDP_MMP_Events.present_fence_release =
  59. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "preset_fence_release");
  60. DDP_MMP_Events.present_fence_get =
  61. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "preset_fence_get");
  62. DDP_MMP_Events.present_fence_set =
  63. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "preset_fence_set");
  64. DDP_MMP_Events.tui =
  65. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "tui");
  66. DDP_MMP_Events.idlemgr =
  67. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "idlemgr");
  68. DDP_MMP_Events.primary_error =
  69. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "primary_error");
  70. #ifdef CONFIG_MTK_HDMI_SUPPORT
  71. DDP_MMP_Events.Extd_Parent = MMProfileRegisterEvent(DDP_MMP_Events.DDP, "ext_disp");
  72. DDP_MMP_Events.Extd_State =
  73. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_State");
  74. DDP_MMP_Events.Extd_DevInfo =
  75. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_DevInfo");
  76. DDP_MMP_Events.Extd_ErrorInfo =
  77. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_ErrorInfo");
  78. DDP_MMP_Events.Extd_Mutex =
  79. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_Mutex");
  80. DDP_MMP_Events.Extd_ImgDump =
  81. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_ImgDump");
  82. DDP_MMP_Events.Extd_IrqStatus =
  83. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_IrqStatus");
  84. DDP_MMP_Events.Extd_UsedBuff =
  85. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_UsedBuf");
  86. DDP_MMP_Events.Extd_trigger =
  87. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_trigger");
  88. DDP_MMP_Events.Extd_config =
  89. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_config");
  90. DDP_MMP_Events.Extd_set_dirty =
  91. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_set_dirty");
  92. DDP_MMP_Events.Extd_cmdq_flush =
  93. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_cmdq_flush");
  94. DDP_MMP_Events.Extd_cmdq_done =
  95. MMProfileRegisterEvent(DDP_MMP_Events.Extd_Parent, "ext_cmdq_done");
  96. #endif
  97. DDP_MMP_Events.primary_display_aalod_trigger =
  98. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "primary_aal_trigger");
  99. DDP_MMP_Events.ESD_Parent = MMProfileRegisterEvent(DDP_MMP_Events.DDP, "ESD");
  100. DDP_MMP_Events.esd_check_t =
  101. MMProfileRegisterEvent(DDP_MMP_Events.ESD_Parent, "ESD_Check");
  102. DDP_MMP_Events.esd_recovery_t =
  103. MMProfileRegisterEvent(DDP_MMP_Events.ESD_Parent, "ESD_Recovery");
  104. DDP_MMP_Events.esd_extte =
  105. MMProfileRegisterEvent(DDP_MMP_Events.esd_check_t, "ESD_Check_EXT_TE");
  106. DDP_MMP_Events.esd_rdlcm =
  107. MMProfileRegisterEvent(DDP_MMP_Events.esd_check_t, "ESD_Check_RD_LCM");
  108. DDP_MMP_Events.esd_vdo_eint =
  109. MMProfileRegisterEvent(DDP_MMP_Events.esd_extte, "ESD_Vdo_EINT");
  110. DDP_MMP_Events.primary_set_bl =
  111. MMProfileRegisterEvent(DDP_MMP_Events.primary_Parent, "set_BL_LCM");
  112. DDP_MMP_Events.dprec_cpu_write_reg = DDP_MMP_Events.MutexParent =
  113. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "dprec_cpu_write_reg");
  114. DDP_MMP_Events.session_Parent =
  115. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "session");
  116. DDP_MMP_Events.ovl_trigger =
  117. MMProfileRegisterEvent(DDP_MMP_Events.session_Parent, "ovl2mem");
  118. DDP_MMP_Events.layerParent = MMProfileRegisterEvent(DDP_MMP_Events.DDP, "Layer");
  119. DDP_MMP_Events.layer[0] =
  120. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Layer0");
  121. DDP_MMP_Events.layer[1] =
  122. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Layer1");
  123. DDP_MMP_Events.layer[2] =
  124. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Layer2");
  125. DDP_MMP_Events.layer[3] =
  126. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Layer3");
  127. DDP_MMP_Events.ovl1_layer[0] =
  128. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Ovl1_Layer0");
  129. DDP_MMP_Events.ovl1_layer[1] =
  130. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Ovl1_Layer1");
  131. DDP_MMP_Events.ovl1_layer[2] =
  132. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Ovl1_Layer2");
  133. DDP_MMP_Events.ovl1_layer[3] =
  134. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "Ovl1_Layer3");
  135. DDP_MMP_Events.layer_dump_parent =
  136. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "layerBmpDump");
  137. DDP_MMP_Events.layer_dump[0] =
  138. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "layer0_dump");
  139. DDP_MMP_Events.layer_dump[1] =
  140. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "Layer1_dump");
  141. DDP_MMP_Events.layer_dump[2] =
  142. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "Layer2_dump");
  143. DDP_MMP_Events.layer_dump[3] =
  144. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "Layer3_dump");
  145. DDP_MMP_Events.ovl1layer_dump[0] =
  146. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "ovl1layer0_dump");
  147. DDP_MMP_Events.ovl1layer_dump[1] =
  148. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "ovl1layer1_dump");
  149. DDP_MMP_Events.ovl1layer_dump[2] =
  150. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "ovl1layer2_dump");
  151. DDP_MMP_Events.ovl1layer_dump[3] =
  152. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "ovl1layer3_dump");
  153. DDP_MMP_Events.wdma_dump[0] =
  154. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "wdma0_dump");
  155. DDP_MMP_Events.wdma_dump[1] =
  156. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "wdma1_dump");
  157. DDP_MMP_Events.rdma_dump[0] =
  158. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "rdma0_dump");
  159. DDP_MMP_Events.rdma_dump[1] =
  160. MMProfileRegisterEvent(DDP_MMP_Events.layer_dump_parent, "rdma1_dump");
  161. DDP_MMP_Events.ovl_enable =
  162. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "ovl_enable_config");
  163. DDP_MMP_Events.ovl_disable =
  164. MMProfileRegisterEvent(DDP_MMP_Events.layerParent, "ovl_disable_config");
  165. DDP_MMP_Events.cascade_enable =
  166. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "cascade_enable");
  167. DDP_MMP_Events.cascade_disable =
  168. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "cascade_disable");
  169. DDP_MMP_Events.ovl1_status =
  170. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "ovl1_status");
  171. DDP_MMP_Events.dpmgr_wait_event_timeout =
  172. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "wait_event_timeout");
  173. DDP_MMP_Events.cmdq_rebuild =
  174. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "cmdq_rebuild");
  175. DDP_MMP_Events.dsi_te = MMProfileRegisterEvent(DDP_MMP_Events.DDP, "dsi_te");
  176. DDP_MMP_Events.DDP_IRQ = MMProfileRegisterEvent(DDP_MMP_Events.DDP, "DDP_IRQ");
  177. DDP_MMP_Events.MutexParent =
  178. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "Mutex");
  179. DDP_MMP_Events.MUTEX_IRQ[0] =
  180. MMProfileRegisterEvent(DDP_MMP_Events.MutexParent, "Mutex0");
  181. DDP_MMP_Events.MUTEX_IRQ[1] =
  182. MMProfileRegisterEvent(DDP_MMP_Events.MutexParent, "Mutex1");
  183. DDP_MMP_Events.MUTEX_IRQ[2] =
  184. MMProfileRegisterEvent(DDP_MMP_Events.MutexParent, "Mutex2");
  185. DDP_MMP_Events.MUTEX_IRQ[3] =
  186. MMProfileRegisterEvent(DDP_MMP_Events.MutexParent, "Mutex3");
  187. DDP_MMP_Events.MUTEX_IRQ[4] =
  188. MMProfileRegisterEvent(DDP_MMP_Events.MutexParent, "Mutex4");
  189. DDP_MMP_Events.OVL_IRQ_Parent =
  190. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "OVL_IRQ");
  191. DDP_MMP_Events.OVL_IRQ[0] =
  192. MMProfileRegisterEvent(DDP_MMP_Events.OVL_IRQ_Parent, "OVL_IRQ_0");
  193. DDP_MMP_Events.OVL_IRQ[1] =
  194. MMProfileRegisterEvent(DDP_MMP_Events.OVL_IRQ_Parent, "OVL_IRQ_1");
  195. DDP_MMP_Events.WDMA_IRQ_Parent =
  196. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "WDMA_IRQ");
  197. DDP_MMP_Events.WDMA_IRQ[0] =
  198. MMProfileRegisterEvent(DDP_MMP_Events.WDMA_IRQ_Parent, "WDMA_IRQ_0");
  199. DDP_MMP_Events.WDMA_IRQ[1] =
  200. MMProfileRegisterEvent(DDP_MMP_Events.WDMA_IRQ_Parent, "WDMA_IRQ_1");
  201. DDP_MMP_Events.RDMA_IRQ_Parent =
  202. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "RDMA_IRQ");
  203. DDP_MMP_Events.RDMA_IRQ[0] =
  204. MMProfileRegisterEvent(DDP_MMP_Events.RDMA_IRQ_Parent, "RDMA_IRQ_0");
  205. DDP_MMP_Events.RDMA_IRQ[1] =
  206. MMProfileRegisterEvent(DDP_MMP_Events.RDMA_IRQ_Parent, "RDMA_IRQ_1");
  207. DDP_MMP_Events.RDMA_IRQ[2] =
  208. MMProfileRegisterEvent(DDP_MMP_Events.RDMA_IRQ_Parent, "RDMA_IRQ_2");
  209. DDP_MMP_Events.ddp_abnormal_irq =
  210. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "ddp_abnormal_irq");
  211. DDP_MMP_Events.SCREEN_UPDATE[0] =
  212. MMProfileRegisterEvent(DDP_MMP_Events.session_Parent, "SCREEN_UPDATE_0");
  213. DDP_MMP_Events.SCREEN_UPDATE[1] =
  214. MMProfileRegisterEvent(DDP_MMP_Events.RDMA_IRQ_Parent, "SCREEN_UPDATE_1");
  215. DDP_MMP_Events.SCREEN_UPDATE[2] =
  216. MMProfileRegisterEvent(DDP_MMP_Events.RDMA_IRQ_Parent, "SCREEN_UPDATE_2");
  217. DDP_MMP_Events.DSI_IRQ_Parent =
  218. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "DSI_IRQ");
  219. DDP_MMP_Events.DSI_IRQ[0] =
  220. MMProfileRegisterEvent(DDP_MMP_Events.DSI_IRQ_Parent, "DSI_IRQ_0");
  221. DDP_MMP_Events.DSI_IRQ[1] =
  222. MMProfileRegisterEvent(DDP_MMP_Events.DSI_IRQ_Parent, "DSI_IRQ_1");
  223. DDP_MMP_Events.primary_sw_mutex =
  224. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "primary_sw_mutex");
  225. DDP_MMP_Events.session_release =
  226. MMProfileRegisterEvent(DDP_MMP_Events.session_Parent, "session_release");
  227. DDP_MMP_Events.MonitorParent =
  228. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "Monitor");
  229. DDP_MMP_Events.trigger_delay =
  230. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "Trigger Delay");
  231. DDP_MMP_Events.release_delay =
  232. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "Release Delay");
  233. DDP_MMP_Events.cg_mode =
  234. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "SPM CG Mode");
  235. DDP_MMP_Events.power_down_mode =
  236. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "SPM Power Down Mode");
  237. DDP_MMP_Events.sodi_disable =
  238. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "Request CG");
  239. DDP_MMP_Events.sodi_enable =
  240. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "Request Power Down");
  241. DDP_MMP_Events.vsync_count =
  242. MMProfileRegisterEvent(DDP_MMP_Events.MonitorParent, "Vsync Ticket");
  243. DDP_MMP_Events.dal_clean = MMProfileRegisterEvent(DDP_MMP_Events.DDP, "DAL Clean");
  244. DDP_MMP_Events.dal_printf =
  245. MMProfileRegisterEvent(DDP_MMP_Events.DDP, "DAL Printf");
  246. DDP_MMP_Events.DSI_IRQ_Parent =
  247. MMProfileRegisterEvent(DDP_MMP_Events.DDP_IRQ, "DSI_IRQ");
  248. DDP_MMP_Events.DSI_IRQ[0] =
  249. MMProfileRegisterEvent(DDP_MMP_Events.DSI_IRQ_Parent, "DSI_IRQ_0");
  250. DDP_MMP_Events.DSI_IRQ[1] =
  251. MMProfileRegisterEvent(DDP_MMP_Events.DSI_IRQ_Parent, "DSI_IRQ_1");
  252. MMProfileEnableEventRecursive(DDP_MMP_Events.DDP, 1);
  253. MMProfileEnableEventRecursive(DDP_MMP_Events.layerParent, 1);
  254. MMProfileEnableEventRecursive(DDP_MMP_Events.MutexParent, 1);
  255. MMProfileEnableEventRecursive(DDP_MMP_Events.DDP_IRQ, 1);
  256. MMProfileEnableEvent(DDP_MMP_Events.primary_sw_mutex, 0);
  257. MMProfileEnableEvent(DDP_MMP_Events.primary_seq_insert, 0);
  258. MMProfileEnableEvent(DDP_MMP_Events.primary_seq_config, 0);
  259. MMProfileEnableEvent(DDP_MMP_Events.primary_seq_trigger, 0);
  260. MMProfileEnableEvent(DDP_MMP_Events.primary_seq_rdma_irq, 0);
  261. MMProfileEnableEvent(DDP_MMP_Events.primary_seq_release, 0);
  262. }
  263. }
  264. void _ddp_mmp_ovl_not_raw_under_session(unsigned int session, OVL_CONFIG_STRUCT *pLayer, MMP_MetaDataBitmap_t *Bitmap)
  265. {
  266. if (session == 1) {
  267. if (ovl_get_status() == DDP_OVL1_STATUS_PRIMARY ||
  268. ovl_get_status() == DDP_OVL1_STATUS_SUB_REQUESTING) { /* 8+0 */
  269. if (pLayer->layer < 4)
  270. MMProfileLogMetaBitmap(DDP_MMP_Events.ovl1layer_dump[pLayer->layer],
  271. MMProfileFlagPulse, Bitmap);
  272. else if (pLayer->layer >= 4 && pLayer->layer < 8)
  273. MMProfileLogMetaBitmap(DDP_MMP_Events.layer_dump[pLayer->layer % 4],
  274. MMProfileFlagPulse, Bitmap);
  275. } else {
  276. MMProfileLogMetaBitmap(DDP_MMP_Events.layer_dump[pLayer->layer % 4],
  277. MMProfileFlagPulse, Bitmap);
  278. }
  279. } else if (session == 2) {
  280. MMProfileLogMetaBitmap(DDP_MMP_Events.ovl1layer_dump[pLayer->layer],
  281. MMProfileFlagPulse, Bitmap);
  282. }
  283. }
  284. void _ddp_mmp_ovl_raw_under_session(unsigned int session, OVL_CONFIG_STRUCT *pLayer, MMP_MetaData_t *meta)
  285. {
  286. if (session == 1) {
  287. if (ovl_get_status() == DDP_OVL1_STATUS_PRIMARY ||
  288. ovl_get_status() == DDP_OVL1_STATUS_SUB_REQUESTING) { /* 8+0 */
  289. if (pLayer->layer < 4)
  290. MMProfileLogMeta(DDP_MMP_Events.ovl1layer_dump[pLayer->layer],
  291. MMProfileFlagPulse, meta);
  292. else if (pLayer->layer >= 4 && pLayer->layer < 8)
  293. MMProfileLogMeta(DDP_MMP_Events.layer_dump[pLayer->layer % 4],
  294. MMProfileFlagPulse, meta);
  295. } else {
  296. MMProfileLogMeta(DDP_MMP_Events.layer_dump[pLayer->layer % 4],
  297. MMProfileFlagPulse, meta);
  298. }
  299. } else if (session == 2) {
  300. MMProfileLogMeta(DDP_MMP_Events.
  301. ovl1layer_dump[pLayer->layer],
  302. MMProfileFlagPulse, meta);
  303. }
  304. }
  305. void ddp_mmp_ovl_layer(OVL_CONFIG_STRUCT *pLayer, unsigned int down_sample_x,
  306. unsigned int down_sample_y,
  307. unsigned int session /*1:primary, 2:external, 3:memory */)
  308. {
  309. MMP_MetaDataBitmap_t Bitmap;
  310. MMP_MetaData_t meta;
  311. int raw = 0;
  312. if (session == 1)
  313. MMProfileLogEx(DDP_MMP_Events.layer_dump_parent, MMProfileFlagStart, pLayer->layer,
  314. pLayer->layer_en);
  315. else if (session == 2)
  316. MMProfileLogEx(DDP_MMP_Events.Extd_layer_dump_parent, MMProfileFlagStart,
  317. pLayer->layer, pLayer->layer_en);
  318. if (pLayer->layer_en) {
  319. Bitmap.data1 = pLayer->vaddr;
  320. Bitmap.width = pLayer->dst_w;
  321. Bitmap.height = pLayer->dst_h;
  322. switch (pLayer->fmt) {
  323. case eRGB565:
  324. case eBGR565:
  325. Bitmap.format = MMProfileBitmapRGB565;
  326. Bitmap.bpp = 16;
  327. break;
  328. case eRGB888:
  329. Bitmap.format = MMProfileBitmapRGB888;
  330. Bitmap.bpp = 24;
  331. break;
  332. case eBGRA8888:
  333. Bitmap.format = MMProfileBitmapBGRA8888;
  334. Bitmap.bpp = 32;
  335. break;
  336. case eBGR888:
  337. Bitmap.format = MMProfileBitmapBGR888;
  338. Bitmap.bpp = 24;
  339. break;
  340. case eRGBA8888:
  341. Bitmap.format = MMProfileBitmapRGBA8888;
  342. Bitmap.bpp = 32;
  343. break;
  344. case eABGR8888:
  345. Bitmap.format = MMProfileBitmapRGBA8888;
  346. Bitmap.bpp = 32;
  347. break;
  348. default:
  349. DDPERR("ddp_mmp_ovl_layer(), unknown fmt=0x%x, %s, dump raw\n", pLayer->fmt,
  350. disp_get_fmt_name(pLayer->fmt));
  351. raw = 1;
  352. }
  353. /* added for ARGB but alpha_enable=0 display */
  354. Bitmap.data2 = pLayer->aen;
  355. if (!raw) {
  356. Bitmap.start_pos = 0;
  357. Bitmap.pitch = pLayer->src_pitch;
  358. Bitmap.data_size = Bitmap.pitch * Bitmap.height;
  359. Bitmap.down_sample_x = down_sample_x;
  360. Bitmap.down_sample_y = down_sample_y;
  361. if (m4u_mva_map_kernel(pLayer->addr, Bitmap.data_size,
  362. (unsigned long int *)&Bitmap.pData, &Bitmap.data_size) == 0) {
  363. _ddp_mmp_ovl_not_raw_under_session(session, pLayer, &Bitmap);
  364. m4u_mva_unmap_kernel(pLayer->addr, Bitmap.data_size,
  365. (unsigned long)Bitmap.pData);
  366. } else {
  367. DDPERR("ddp_mmp_ovl_layer(),fail to dump rgb(0x%x)\n", pLayer->fmt);
  368. }
  369. } else {
  370. meta.data_type = MMProfileMetaRaw;
  371. meta.size = pLayer->src_pitch * pLayer->src_h;
  372. if (m4u_mva_map_kernel(pLayer->addr, meta.size,
  373. (unsigned long int *)&meta.pData, &meta.size) == 0) {
  374. _ddp_mmp_ovl_raw_under_session(session, pLayer, &meta);
  375. m4u_mva_unmap_kernel(pLayer->addr, meta.size,
  376. (unsigned long)meta.pData);
  377. } else {
  378. DDPERR("ddp_mmp_ovl_layer(),fail to dump raw(0x%x)\n", pLayer->fmt);
  379. }
  380. }
  381. }
  382. if (session == 1)
  383. MMProfileLogEx(DDP_MMP_Events.layer_dump_parent, MMProfileFlagEnd, pLayer->fmt, pLayer->addr);
  384. else if (session == 2)
  385. MMProfileLogEx(DDP_MMP_Events.Extd_layer_dump_parent, MMProfileFlagEnd, pLayer->fmt, pLayer->addr);
  386. }
  387. void ddp_mmp_wdma_layer(WDMA_CONFIG_STRUCT *wdma_layer, unsigned int wdma_num,
  388. unsigned int down_sample_x, unsigned int down_sample_y)
  389. {
  390. MMP_MetaDataBitmap_t Bitmap;
  391. MMP_MetaData_t meta;
  392. int raw = 0;
  393. if (wdma_num > 1) {
  394. DDPERR("dprec_mmp_dump_wdma_layer is error %d\n", wdma_num);
  395. return;
  396. }
  397. Bitmap.data1 = wdma_layer->dstAddress;
  398. Bitmap.width = wdma_layer->srcWidth;
  399. Bitmap.height = wdma_layer->srcHeight;
  400. switch (wdma_layer->outputFormat) {
  401. case eRGB565:
  402. case eBGR565:
  403. Bitmap.format = MMProfileBitmapRGB565;
  404. Bitmap.bpp = 16;
  405. break;
  406. case eRGB888:
  407. Bitmap.format = MMProfileBitmapRGB888;
  408. Bitmap.bpp = 24;
  409. break;
  410. case eBGRA8888:
  411. Bitmap.format = MMProfileBitmapBGRA8888;
  412. Bitmap.bpp = 32;
  413. break;
  414. case eBGR888:
  415. Bitmap.format = MMProfileBitmapBGR888;
  416. Bitmap.bpp = 24;
  417. break;
  418. case eRGBA8888:
  419. Bitmap.format = MMProfileBitmapRGBA8888;
  420. Bitmap.bpp = 32;
  421. break;
  422. default:
  423. DDPERR("dprec_mmp_dump_wdma_layer(), unknown fmt=%d, dump raw\n", wdma_layer->outputFormat);
  424. raw = 1;
  425. }
  426. if (!raw) {
  427. Bitmap.start_pos = 0;
  428. Bitmap.pitch = wdma_layer->dstPitch;
  429. Bitmap.data_size = Bitmap.pitch * Bitmap.height;
  430. Bitmap.down_sample_x = down_sample_x;
  431. Bitmap.down_sample_y = down_sample_y;
  432. if (m4u_mva_map_kernel(wdma_layer->dstAddress, Bitmap.data_size, (unsigned long int *)&Bitmap.pData,
  433. &Bitmap.data_size) == 0) {
  434. MMProfileLogMetaBitmap(DDP_MMP_Events.wdma_dump[wdma_num], MMProfileFlagPulse, &Bitmap);
  435. m4u_mva_unmap_kernel(wdma_layer->dstAddress, Bitmap.data_size, (unsigned long)Bitmap.pData);
  436. } else {
  437. DDPERR("dprec_mmp_dump_wdma_layer(),fail to dump rgb(0x%x)\n", wdma_layer->outputFormat);
  438. }
  439. } else {
  440. meta.data_type = MMProfileMetaRaw;
  441. meta.size = wdma_layer->dstPitch * wdma_layer->srcHeight;
  442. if (m4u_mva_map_kernel(wdma_layer->dstAddress, meta.size,
  443. (unsigned long int *)&meta.pData, &meta.size) == 0)
  444. MMProfileLogMeta(DDP_MMP_Events.wdma_dump[wdma_num], MMProfileFlagPulse, &meta);
  445. else
  446. DDPERR("dprec_mmp_dump_wdma_layer(),fail to dump raw(0x%x)\n", wdma_layer->outputFormat);
  447. }
  448. }
  449. void ddp_mmp_rdma_layer(RDMA_CONFIG_STRUCT *rdma_layer, unsigned int rdma_num,
  450. unsigned int down_sample_x, unsigned int down_sample_y)
  451. {
  452. MMP_MetaDataBitmap_t Bitmap;
  453. MMP_MetaData_t meta;
  454. int raw = 0;
  455. if (rdma_num > 1) {
  456. DDPERR("dump_rdma_layer is error %d\n", rdma_num);
  457. return;
  458. }
  459. Bitmap.data1 = rdma_layer->address;
  460. Bitmap.width = rdma_layer->width;
  461. Bitmap.height = rdma_layer->height;
  462. switch (rdma_layer->inputFormat) {
  463. case eRGB565:
  464. case eBGR565:
  465. Bitmap.format = MMProfileBitmapRGB565;
  466. Bitmap.bpp = 16;
  467. break;
  468. case eRGB888:
  469. Bitmap.format = MMProfileBitmapRGB888;
  470. Bitmap.bpp = 24;
  471. break;
  472. case eBGRA8888:
  473. Bitmap.format = MMProfileBitmapBGRA8888;
  474. Bitmap.bpp = 32;
  475. break;
  476. case eBGR888:
  477. Bitmap.format = MMProfileBitmapBGR888;
  478. Bitmap.bpp = 24;
  479. break;
  480. case eRGBA8888:
  481. Bitmap.format = MMProfileBitmapRGBA8888;
  482. Bitmap.bpp = 32;
  483. break;
  484. default:
  485. DDPERR("dump_rdma_layer(), unknown fmt=%d, dump raw\n", rdma_layer->inputFormat);
  486. raw = 1;
  487. }
  488. if (!raw) {
  489. Bitmap.start_pos = 0;
  490. Bitmap.pitch = rdma_layer->pitch;
  491. Bitmap.data_size = Bitmap.pitch * Bitmap.height;
  492. Bitmap.down_sample_x = down_sample_x;
  493. Bitmap.down_sample_y = down_sample_y;
  494. if (m4u_mva_map_kernel(rdma_layer->address, Bitmap.data_size, (unsigned long int *)&Bitmap.pData,
  495. &Bitmap.data_size) == 0) {
  496. MMProfileLogMetaBitmap(DDP_MMP_Events.rdma_dump[rdma_num], MMProfileFlagPulse, &Bitmap);
  497. m4u_mva_unmap_kernel(rdma_layer->address, Bitmap.data_size, (unsigned long)Bitmap.pData);
  498. } else {
  499. DDPERR("dump_rdma_layer(),fail to dump rgb(0x%x)\n", rdma_layer->inputFormat);
  500. }
  501. } else {
  502. meta.data_type = MMProfileMetaRaw;
  503. meta.size = rdma_layer->pitch * rdma_layer->height;
  504. if (m4u_mva_map_kernel(rdma_layer->address, meta.size, (unsigned long int *)&meta.pData,
  505. &meta.size) == 0) {
  506. MMProfileLogMeta(DDP_MMP_Events.rdma_dump[rdma_num], MMProfileFlagPulse, &meta);
  507. m4u_mva_unmap_kernel(rdma_layer->address, meta.size, (unsigned long)meta.pData);
  508. } else {
  509. DDPERR("dprec_mmp_dump_rdma_layer(),fail to dump raw(0x%x)\n", rdma_layer->inputFormat);
  510. }
  511. }
  512. }
  513. DDP_MMP_Events_t *ddp_mmp_get_events(void)
  514. {
  515. return &DDP_MMP_Events;
  516. }
  517. void ddp_mmp_init(void)
  518. {
  519. #ifdef DEFAULT_MMP_ENABLE
  520. DDPPRINT("ddp_mmp_init\n");
  521. MMProfileEnable(1);
  522. init_ddp_mmp_events();
  523. MMProfileStart(1);
  524. #endif
  525. }