ddp_info.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  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 "INFO"
  32. #include <platform/ddp_log.h>
  33. #include <platform/ddp_info.h>
  34. #include <platform/disp_drv_platform.h>
  35. extern DDP_MODULE_DRIVER ddp_driver_dsi0;
  36. /* extern DDP_MODULE_DRIVER ddp_driver_dsi1; */
  37. /* extern DDP_MODULE_DRIVER ddp_driver_dsidual; */
  38. extern DDP_MODULE_DRIVER ddp_driver_ovl;
  39. extern DDP_MODULE_DRIVER ddp_driver_rdma;
  40. extern DDP_MODULE_DRIVER ddp_driver_color;
  41. extern DDP_MODULE_DRIVER ddp_driver_ccorr;
  42. extern DDP_MODULE_DRIVER ddp_driver_aal;
  43. extern DDP_MODULE_DRIVER ddp_driver_gamma;
  44. extern DDP_MODULE_DRIVER ddp_driver_postmask;
  45. extern DDP_MODULE_DRIVER ddp_driver_dither;
  46. /* extern DDP_MODULE_DRIVER ddp_driver_split; */
  47. extern DDP_MODULE_DRIVER ddp_driver_pwm;
  48. extern DDP_MODULE_DRIVER ddp_driver_dsc;
  49. ddp_module ddp_modules[DISP_MODULE_NUM] = {
  50. {DISP_MODULE_OVL0,"ovl0",1,&ddp_driver_ovl},
  51. {DISP_MODULE_OVL0_2L,"ovl0_2l",1,&ddp_driver_ovl},
  52. {DISP_MODULE_OVL0_2L_VIRTUAL0,"ovl0_2l_virt",1,NULL},
  53. {DISP_MODULE_OVL0_VIRTUAL0,"ovl0_virt",1,NULL},
  54. {DISP_MODULE_RSZ0,"disp_rsz0",1,NULL},
  55. {DISP_MODULE_OVL1,"ovl1",1,&ddp_driver_ovl},
  56. {DISP_MODULE_OVL1_2L,"ovl1_2l",1,&ddp_driver_ovl},
  57. {DISP_MODULE_OVL1_2L_VIRTUAL0,"ovl1_2l_virt",1,NULL},
  58. {DISP_MODULE_OVL1_VIRTUAL0,"ovl1_virt",1,NULL},
  59. {DISP_MODULE_RSZ1,"disp_rsz1",1,NULL},
  60. {DISP_MODULE_RDMA0,"rdma0",1,&ddp_driver_rdma},
  61. {DISP_MODULE_RDMA0_VIRTUAL0,"rdma0_virt",1,NULL},
  62. {DISP_MODULE_WDMA0,"wdma0",1,NULL},
  63. {DISP_MODULE_COLOR0,"color0",1,&ddp_driver_color},
  64. {DISP_MODULE_CCORR0,"ccorr0",1,&ddp_driver_ccorr},
  65. {DISP_MODULE_RDMA1,"rdma1",1,&ddp_driver_rdma},
  66. {DISP_MODULE_RDMA1_VIRTUAL0,"rdma1_virt",1,NULL},
  67. {DISP_MODULE_WDMA1,"wdma1",1,NULL},
  68. {DISP_MODULE_COLOR1,"color1",1,&ddp_driver_color},
  69. {DISP_MODULE_CCORR1,"ccorr1",1,&ddp_driver_ccorr},
  70. {DISP_MODULE_AAL0,"aal0",1,&ddp_driver_aal},
  71. {DISP_MODULE_MDP_AAL4,"mdp_aal4",1,&ddp_driver_aal},
  72. {DISP_MODULE_GAMMA0,"gamma0",1,&ddp_driver_gamma},
  73. {DISP_MODULE_POSTMASK0,"postmask0",1,&ddp_driver_postmask},
  74. {DISP_MODULE_DITHER0,"dither0",1,&ddp_driver_dither},
  75. {DISP_MODULE_DITHER0_VIRTUAL0,"dither0_virt",1,NULL},
  76. {DISP_MODULE_AAL1,"aal1",1,&ddp_driver_aal},
  77. {DISP_MODULE_MDP_AAL5,"mdp_aal5",1,NULL},
  78. {DISP_MODULE_GAMMA1,"gamma1",1,&ddp_driver_gamma},
  79. {DISP_MODULE_POSTMASK1,"postmask1",1,&ddp_driver_postmask},
  80. {DISP_MODULE_DITHER1,"dither1",1,&ddp_driver_dither},
  81. {DISP_MODULE_SPLIT0,"split0",0,NULL},
  82. {DISP_MODULE_DSI0,"dsi0",1,&ddp_driver_dsi0},
  83. {DISP_MODULE_DSI1,"dsi1",0,NULL},
  84. {DISP_MODULE_DSIDUAL,"dsidual",0,NULL},
  85. {DISP_MODULE_PWM0,"pwm0",0,NULL},
  86. {DISP_MODULE_CONFIG,"config",0,NULL},
  87. {DISP_MODULE_MUTEX,"mutex",0,NULL},
  88. {DISP_MODULE_SMI_COMMON,"sim_common",0,NULL},
  89. {DISP_MODULE_SMI_LARB0,"smi_larb0",0,NULL},
  90. {DISP_MODULE_SMI_LARB1,"smi_larb1",0,NULL},
  91. {DISP_MODULE_MIPI0,"mipi0",0,NULL},
  92. {DISP_MODULE_MIPI1,"mipi1",0,NULL},
  93. {DISP_MODULE_DPI,"dpi",0,NULL},
  94. {DISP_MODULE_OVL2_2L,"ovl2_2l",1,&ddp_driver_ovl},
  95. {DISP_MODULE_OVL3_2L,"ovl3_2l",1,&ddp_driver_ovl},
  96. {DISP_MODULE_RDMA4,"rdma4",1,&ddp_driver_rdma},
  97. {DISP_MODULE_RDMA5,"rdma5",1,&ddp_driver_rdma},
  98. {DISP_MODULE_MDP_RDMA4,"mdp_rdma4",0,&ddp_driver_rdma},
  99. {DISP_MODULE_MDP_RDMA5,"mdp_rdma5",0,&ddp_driver_rdma},
  100. {DISP_MODULE_MDP_RSZ4,"mdp_rsz4",0,&ddp_driver_rdma},
  101. {DISP_MODULE_MDP_RSZ5,"mdp_rsz5",0,&ddp_driver_rdma},
  102. {DISP_MODULE_MERGE0,"merge0",0,&ddp_driver_rdma},
  103. {DISP_MODULE_MERGE1,"merge1",0,&ddp_driver_rdma},
  104. {DISP_MODULE_DP_INTF,"dp_intf",0,&ddp_driver_rdma},
  105. {DISP_MODULE_DSC,"dsc",1,&ddp_driver_dsc},
  106. {DISP_MODULE_DSC_VIRTUAL0,"dsc_virt",1,NULL},
  107. {DISP_MODULE_UNKNOWN,"unknown",0,NULL},
  108. };
  109. DDP_MODULE_DRIVER *ddp_modules_driver[DISP_MODULE_NUM] = {0};
  110. /* PMMSYS_CONFIG_REGS g_MMSYS_CONFIG_BASE = (PMMSYS_CONFIG_REGS)MMSYS_CONFIG_BASE; */
  111. PDISP_SPLIT_REGS g_DISP_SPLIT_BASE = (PDISP_SPLIT_REGS)DISP_SPLIT0_BASE;
  112. /* PDISP_DSI0_REGS g_DISP_DSI0_BASE = (PDISP_DSI0_REGS)DSI0_BASE; */
  113. PDISP_MUTEX_REGS g_DISP_MUTEX_BASE = (PDISP_MUTEX_REGS)MM_MUTEX_BASE;
  114. PDISP_OVL0_REGS g_DISP_OVL0_BASE = (PDISP_OVL0_REGS)OVL0_BASE;
  115. /* Pmipi_tx_config_REGS g_mipi_tx_config0_BASE = (Pmipi_tx_config_REGS)MIPI_TX0_BASE; */
  116. int ddp_enable_module_clock(DISP_MODULE_ENUM module)
  117. {
  118. #ifdef DISP_HELPER_STAGE_NORMAL_LK
  119. switch (module) {
  120. /* MMSYS_CG_CON0 */
  121. case DISP_MODULE_SMI_COMMON:
  122. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_COMMON,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  123. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_GALS,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  124. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_INFRA,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  125. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_IOMMU,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  126. break;
  127. case DISP_MODULE_SMI_LARB0:
  128. /* DISP_REG_SET_FIELD(NULL,FLD_CG0_SMI_LARB0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1); */
  129. break;
  130. case DISP_MODULE_SMI_LARB1:
  131. /* DISP_REG_SET_FIELD(NULL,MMSYS_CG_FLD_CG0_SMI_LARB1,DISP_REG_CONFIG_MMSYS_CG_CLR0,1); */
  132. break;
  133. case DISP_MODULE_OVL0:
  134. DISP_REG_SET_FIELD(NULL,FLD_CG0_OVL0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  135. break;
  136. case DISP_MODULE_OVL0_2L:
  137. DISP_REG_SET_FIELD(NULL,FLD_CG0_OVL0_2L,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  138. break;
  139. case DISP_MODULE_RDMA0:
  140. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_RDMA0,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  141. break;
  142. case DISP_MODULE_WDMA0:
  143. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_WDMA0,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  144. break;
  145. case DISP_MODULE_COLOR0:
  146. DISP_REG_SET_FIELD(NULL,FLD_CG0_COLOR0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  147. break;
  148. case DISP_MODULE_CCORR0:
  149. DISP_REG_SET_FIELD(NULL,FLD_CG0_CCORR0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  150. break;
  151. case DISP_MODULE_AAL0:
  152. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_AAL0,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  153. break;
  154. case DISP_MODULE_GAMMA0:
  155. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_GAMMA0,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  156. break;
  157. case DISP_MODULE_POSTMASK0:
  158. DISP_REG_SET_FIELD(NULL,FLD_CG0_POSTMASK0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  159. break;
  160. case DISP_MODULE_DITHER0:
  161. DISP_REG_SET_FIELD(NULL,FLD_CG0_DITHER0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  162. break;
  163. case DISP_MODULE_DSI0:
  164. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI0_MM,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  165. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI0,DISP_REG_CONFIG_MMSYS_CG_CLR2,1);
  166. break;
  167. case DISP_MODULE_DSI1:
  168. /*
  169. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI1_MM,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  170. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI1,DISP_REG_CONFIG_MMSYS_CG_CLR2,1);
  171. */
  172. break;
  173. case DISP_MODULE_DSIDUAL:
  174. /*
  175. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI0_MM,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  176. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI0,DISP_REG_CONFIG_MMSYS_CG_CLR2,1);
  177. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI1_MM,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  178. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI1,DISP_REG_CONFIG_MMSYS_CG_CLR2,1);
  179. */
  180. break;
  181. case DISP_MODULE_RSZ0:
  182. DISP_REG_SET_FIELD(NULL,FLD_CG0_DISP_RSZ0,DISP_REG_CONFIG_MMSYS_CG_CLR0,1);
  183. break;
  184. case DISP_MODULE_DSC:
  185. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_DSC,DISP_REG_CONFIG_MMSYS_CG_CLR1,1);
  186. break;
  187. default:
  188. DDPERR("enable module clock unknow module %d \n",module);
  189. }
  190. #endif
  191. return 0;
  192. }
  193. int ddp_disable_module_clock(DISP_MODULE_ENUM module)
  194. {
  195. #ifdef DISP_HELPER_STAGE_NORMAL_LK
  196. switch (module) {
  197. /* MMSYS_CG_CON0 */
  198. case DISP_MODULE_SMI_COMMON:
  199. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_IOMMU,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  200. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_INFRA,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  201. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_GALS,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  202. DISP_REG_SET_FIELD(NULL,FLD_CG1_SMI_COMMON,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  203. break;
  204. case DISP_MODULE_SMI_LARB0:
  205. /* DISP_REG_SET_FIELD(NULL,FLD_CG0_SMI_LARB0,DISP_REG_CONFIG_MMSYS_CG_SET0,1); */
  206. break;
  207. case DISP_MODULE_SMI_LARB1:
  208. /* DISP_REG_SET_FIELD(NULL,MMSYS_CG_FLD_CG0_SMI_LARB1,DISP_REG_CONFIG_MMSYS_CG_SET0,1); */
  209. break;
  210. case DISP_MODULE_OVL0:
  211. DISP_REG_SET_FIELD(NULL,FLD_CG0_OVL0,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  212. break;
  213. case DISP_MODULE_OVL0_2L:
  214. DISP_REG_SET_FIELD(NULL,FLD_CG0_OVL0_2L,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  215. break;
  216. case DISP_MODULE_RDMA0:
  217. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_RDMA0,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  218. break;
  219. case DISP_MODULE_WDMA0:
  220. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_WDMA0,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  221. break;
  222. case DISP_MODULE_COLOR0:
  223. DISP_REG_SET_FIELD(NULL,FLD_CG0_COLOR0,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  224. break;
  225. case DISP_MODULE_CCORR0:
  226. DISP_REG_SET_FIELD(NULL,FLD_CG0_CCORR0,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  227. break;
  228. case DISP_MODULE_AAL0:
  229. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_AAL0,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  230. break;
  231. case DISP_MODULE_GAMMA0:
  232. DISP_REG_SET_FIELD(NULL,FLD_CG1_DISP_GAMMA0,DISP_REG_CONFIG_MMSYS_CG_SET1,1);
  233. break;
  234. case DISP_MODULE_POSTMASK0:
  235. DISP_REG_SET_FIELD(NULL,FLD_CG0_POSTMASK0,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  236. break;
  237. case DISP_MODULE_DITHER0:
  238. DISP_REG_SET_FIELD(NULL,FLD_CG0_DITHER0,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  239. break;
  240. case DISP_MODULE_DSI0:
  241. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI0,DISP_REG_CONFIG_MMSYS_CG_SET2,1);
  242. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI0_MM,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  243. break;
  244. case DISP_MODULE_DSI1:
  245. /*
  246. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI1,DISP_REG_CONFIG_MMSYS_CG_SET2,1);
  247. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI1_MM,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  248. */
  249. break;
  250. case DISP_MODULE_DSIDUAL:
  251. /*
  252. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI0,DISP_REG_CONFIG_MMSYS_CG_SET2,1);
  253. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI0_MM,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  254. DISP_REG_SET_FIELD(NULL,FLD_CG2_DSI1,DISP_REG_CONFIG_MMSYS_CG_SET2,1);
  255. DISP_REG_SET_FIELD(NULL,FLD_CG0_DSI1_MM,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  256. */
  257. break;
  258. case DISP_MODULE_RSZ0:
  259. DISP_REG_SET_FIELD(NULL,FLD_CG0_DISP_RSZ0,DISP_REG_CONFIG_MMSYS_CG_SET0,1);
  260. break;
  261. default:
  262. DDPERR("disable module clock unknow module %d \n",module);
  263. }
  264. #endif
  265. DDPMSG("disable %s clk, CG0 0x%x, CG1 0x%x",
  266. ddp_get_module_name(module),
  267. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON0),
  268. DISP_REG_GET(DISP_REG_CONFIG_MMSYS_CG_CON1));
  269. return 0;
  270. }
  271. unsigned int is_ddp_module(DISP_MODULE_ENUM module)
  272. {
  273. if (module >= 0 && module < DISP_MODULE_NUM)
  274. return 1;
  275. else
  276. return 0;
  277. }
  278. char *ddp_get_module_name(DISP_MODULE_ENUM module)
  279. {
  280. if (is_ddp_module(module)) {
  281. return ddp_modules[module].module_name;
  282. } else {
  283. DDPMSG("invalid module id=%d", module);
  284. return "unknown";
  285. }
  286. }
  287. void ddp_init_modules_driver(void)
  288. {
  289. unsigned int i = 0;
  290. for (i = 0; i < DISP_MODULE_NUM; i++) {
  291. ddp_modules_driver[i] = ddp_modules[i].module_driver;
  292. }
  293. }