ddp_reg.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. #ifndef _DDP_REG_H_
  32. #define _DDP_REG_H_
  33. #include <platform/mt_typedefs.h>
  34. #include <platform/sync_write.h>
  35. #include <platform/mt_reg_base.h>
  36. typedef void * cmdqRecHandle;
  37. //TDODO: get base reg addr from system header
  38. #define DISP_INDEX_OFFSET (DISP_OVL0_2L_BASE - OVL0_BASE) /* used by ovl */
  39. #define DISP_RDMA_INDEX_OFFSET (DISP_RDMA1_BASE - DISP_RDMA0_BASE) /* used by rdma */
  40. #define DISPSYS_OVL0_BASE OVL0_BASE
  41. #define DISPSYS_WDMA0_BASE DISP_WDMA0_BASE
  42. #define DISPSYS_RDMA0_BASE DISP_RDMA0_BASE
  43. #define DISPSYS_COLOR0_BASE COLOR0_BASE
  44. #define DISPSYS_AAL0_BASE DISP_AAL0_BASE
  45. #define DISPSYS_GAMMA0_BASE DISP_GAMMA0_BASE
  46. #define DISPSYS_SPLIT0_BASE DISP_SPLIT0_BASE
  47. #define DISPSYS_DSI0_BASE DSI0_BASE
  48. #define DISPSYS_DITHER0_BASE DITHER0_BASE
  49. #define DISPSYS_DSI1_BASE DSI1_BASE
  50. #define DISPSYS_PWM0_BASE DISP_PWM0_BASE
  51. #define DISPSYS_PWM1_BASE (0)
  52. #define DISPSYS_MUTEX_BASE MM_MUTEX_BASE
  53. #define DISPSYS_SMI_LARB0_BASE SMI_LARB0_BASE
  54. //#define DISPSYS_SMI_LARB1_BASE SMI_LARB1_BASE
  55. #define DISPSYS_SMI_COMMON_BASE SMI_COMMON_BASE
  56. #define DISPSYS_CCORR0_BASE CCORR0_BASE
  57. #define DISPSYS_DPI_BASE DPI_BASE
  58. #define DISPSYS_MIPITX0_BASE MIPI_TX0_BASE
  59. #define DISPSYS_MIPITX1_BASE MIPI_TX1_BASE
  60. #define DISPSYS_CONFIG_BASE MMSYS_CONFIG_BASE
  61. // ---------------------------------------------------------------------------
  62. // Type Casting
  63. // ---------------------------------------------------------------------------
  64. #define AS_INT32(x) (*(INT32 *)(x))
  65. #define AS_INT16(x) (*(INT16 *)(x))
  66. #define AS_INT8(x) (*(INT8 *)(x))
  67. #define AS_UINT32(x) (*(UINT32 *)(x))
  68. #define AS_UINT16(x) (*(UINT16 *)(x))
  69. #define AS_UINT8(x) (*(UINT8 *)(x))
  70. // ---------------------------------------------------------------------------
  71. // Register Manipulations
  72. // ---------------------------------------------------------------------------
  73. /*
  74. #define READ_REGISTER_UINT32(reg) \
  75. (*(volatile UINT32 * const)(reg))
  76. #define WRITE_REGISTER_UINT32(reg, val) \
  77. (*(volatile UINT32 * const)(reg)) = (val)
  78. #define READ_REGISTER_UINT16(reg) \
  79. (*(volatile UINT16 * const)(reg))
  80. #define WRITE_REGISTER_UINT16(reg, val) \
  81. (*(volatile UINT16 * const)(reg)) = (val)
  82. #define READ_REGISTER_UINT8(reg) \
  83. (*(volatile UINT8 * const)(reg))
  84. #define WRITE_REGISTER_UINT8(reg, val) \
  85. (*(volatile UINT8 * const)(reg)) = (val)
  86. */
  87. // ---------------------------------------------------------------------------
  88. // Register Field Access
  89. // ---------------------------------------------------------------------------
  90. #define REG_FLD(width, shift) \
  91. ((unsigned int)((((width) & 0xFF) << 16) | ((shift) & 0xFF)))
  92. #define REG_FLD_MSB_LSB(msb, lsb) REG_FLD((msb) - (lsb) + 1, (lsb))
  93. #define REG_FLD_WIDTH(field) \
  94. ((unsigned int)(((field) >> 16) & 0xFF))
  95. #define REG_FLD_SHIFT(field) \
  96. ((unsigned int)((field) & 0xFF))
  97. #define REG_FLD_MASK(field) \
  98. ((unsigned int)((1ULL << REG_FLD_WIDTH(field)) - 1) << REG_FLD_SHIFT(field))
  99. #define REG_FLD_VAL(field, val) \
  100. (((val) << REG_FLD_SHIFT(field)) & REG_FLD_MASK(field))
  101. #define REG_FLD_VAL_GET(field, regval) \
  102. (((regval) & REG_FLD_MASK(field)) >> REG_FLD_SHIFT(field))
  103. #define DISP_REG_GET(reg32) (*(volatile unsigned int*)(reg32))
  104. #define DISP_REG_GET_FIELD(field, reg32) ((*(volatile unsigned int*)(reg32) & REG_FLD_MASK(field)) >> REG_FLD_SHIFT(field))
  105. /* polling register until masked bit is 1 */
  106. #define DDP_REG_POLLING(reg32, mask) \
  107. do { \
  108. while (!((DISP_REG_GET(reg32))&mask))\
  109. ; \
  110. } while (0)
  111. /* Polling register until masked bit is 0 */
  112. #define DDP_REG_POLLING_NEG(reg32, mask) \
  113. do { \
  114. while ((DISP_REG_GET(reg32))&mask)\
  115. ; \
  116. } while (0)
  117. #define DISP_CPU_REG_SET(reg32, val) mt_reg_sync_writel(val, (volatile unsigned int*)(reg32))
  118. #define DISP_CPU_REG_SET_FIELD(field, reg32, val) \
  119. do { \
  120. mt_reg_sync_writel( (*(volatile unsigned int*)(reg32) & ~REG_FLD_MASK(field))|REG_FLD_VAL((field), (val)), reg32); \
  121. } while (0)
  122. #define DISP_REG_MASK(handle, reg32, val, mask) \
  123. do { \
  124. mt_reg_sync_writel((unsigned int)(INREG32(reg32)&~(mask))|(val),(volatile unsigned long*)(reg32) );\
  125. } while (0)
  126. #define DISP_REG_SET(handle,reg32, val) \
  127. do { \
  128. mt_reg_sync_writel(val, (volatile unsigned int*)(reg32));\
  129. } while (0)
  130. #define DISP_REG_SET_FIELD(handle,field, reg32, val) \
  131. do { \
  132. mt_reg_sync_writel( (*(volatile unsigned int*)(reg32) & ~REG_FLD_MASK(field))|REG_FLD_VAL((field), (val)), reg32); \
  133. } while (0)
  134. #define DISP_REG_CMDQ_POLLING(handle, reg32, val, mask) \
  135. do { \
  136. while ((DISP_REG_GET(reg32) & (mask)) != ((val) & (mask)))\
  137. ; \
  138. } while (0)
  139. #include <platform/ddp_reg_mmsys.h>
  140. #include <platform/ddp_reg_mutex.h>
  141. #include <platform/ddp_reg_ovl.h>
  142. #include <platform/ddp_reg_dsi.h>
  143. #include <platform/ddp_reg_mipi.h>
  144. #include <platform/ddp_reg_dma.h>
  145. #include <platform/ddp_reg_pq.h>
  146. #endif