mtk-phy.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #ifndef __MTK_PHY_NEW_H
  2. #define __MTK_PHY_NEW_H
  3. #define CONFIG_U3D_HAL_SUPPORT
  4. #ifdef CONFIG_U3D_HAL_SUPPORT
  5. #include "mu3d_hal_hw.h"
  6. #endif
  7. #ifdef CONFIG_U3D_HAL_SUPPORT
  8. #define REF_CK U3D_PHY_REF_CK
  9. #else
  10. #define REF_CK 25
  11. #endif
  12. /* include system library */
  13. #include <linux/slab.h>
  14. #include <linux/delay.h>
  15. #include <linux/io.h>
  16. /* BASE ADDRESS DEFINE, should define this on ASIC */
  17. #define PHY_BASE 0x0
  18. #define SIFSLV_SPLLC_BASE (PHY_BASE+0x0)
  19. #define SIFSLV_FM_FEG_BASE (PHY_BASE+0x100)
  20. #define SIFSLV_CHIP_BASE (PHY_BASE+0x700)
  21. #define U2_PHY_BASE (PHY_BASE+0x800)
  22. #define U3_PHYD_BASE (PHY_BASE+0x900)
  23. #define U3_PHYD_B2_BASE (PHY_BASE+0xa00)
  24. #define U3_PHYA_BASE (PHY_BASE+0xb00)
  25. #define U3_PHYA_DA_BASE (PHY_BASE+0xc00)
  26. /*
  27. 0x00000100 MODULE ssusb_sifslv_fmreg ssusb_sifslv_fmreg
  28. 0x00000700 MODULE ssusb_sifslv_ippc ssusb_sifslv_ippc
  29. 0x00000800 MODULE ssusb_sifslv_u2phy_com ssusb_sifslv_u2_phy_com_T28
  30. 0x00000900 MODULE ssusb_sifslv_u3phyd ssusb_sifslv_u3phyd_T28
  31. 0x00000a00 MODULE ssusb_sifslv_u3phyd_bank2 ssusb_sifslv_u3phyd_bank2_T28
  32. 0x00000b00 MODULE ssusb_sifslv_u3phya ssusb_sifslv_u3phya_T28
  33. 0x00000c00 MODULE ssusb_sifslv_u3phya_da ssusb_sifslv_u3phya_da_T28
  34. */
  35. /* TYPE DEFINE */
  36. typedef unsigned int PHY_UINT32;
  37. typedef int PHY_INT32;
  38. typedef unsigned short PHY_UINT16;
  39. typedef short PHY_INT16;
  40. typedef unsigned char PHY_UINT8;
  41. typedef char PHY_INT8;
  42. typedef PHY_UINT32 __bitwise PHY_LE32;
  43. #ifdef CONFIG_U3_PHY_AHB_SUPPORT
  44. #ifdef CONFIG_ARM64
  45. typedef u64 u3phy_addr_t;
  46. #define ALIGN_MASK 0xFFFFFFFFFFFFFFFC
  47. #else
  48. typedef u32 u3phy_addr_t;
  49. #define ALIGN_MASK 0xFFFFFFFC
  50. #endif
  51. #else
  52. typedef u32 u3phy_addr_t;
  53. #define ALIGN_MASK 0xFFFFFFFC
  54. #endif
  55. /* MACRO DEFINE */
  56. #define DRV_WriteReg32(addr, data) writel(data, (void __iomem *)addr)
  57. #define DRV_Reg32(addr) readl((void __iomem *)addr)
  58. /* CONSTANT DEFINE */
  59. #define PHY_FALSE 0
  60. #define PHY_TRUE 1
  61. /* #define DRV_MDELAY mdelay */
  62. #define DRV_MSLEEP msleep
  63. #define DRV_UDELAY udelay
  64. /* #define DRV_USLEEP usleep */
  65. /* PHY FUNCTION DEFINE, implemented in platform files, ex. ahb, gpio */
  66. PHY_INT32 U3PhyWriteReg32(u3phy_addr_t addr, PHY_UINT32 data);
  67. PHY_INT32 U3PhyReadReg32(u3phy_addr_t addr);
  68. PHY_INT32 U3PhyWriteReg8(u3phy_addr_t addr, PHY_UINT8 data);
  69. PHY_INT8 U3PhyReadReg8(u3phy_addr_t addr);
  70. /* PHY GENERAL USAGE FUNC, implemented in mtk-phy.c */
  71. PHY_INT32 U3PhyWriteField8(phys_addr_t addr, PHY_INT32 offset, PHY_INT32 mask, PHY_INT32 value);
  72. PHY_INT32 U3PhyWriteField32(phys_addr_t addr, PHY_INT32 offset, PHY_INT32 mask, PHY_INT32 value);
  73. PHY_INT32 U3PhyReadField8(phys_addr_t addr, PHY_INT32 offset, PHY_INT32 mask);
  74. PHY_INT32 U3PhyReadField32(phys_addr_t addr, PHY_INT32 offset, PHY_INT32 mask);
  75. struct u3phy_info {
  76. PHY_INT32 phy_version;
  77. PHY_INT32 phyd_version_addr;
  78. #ifdef CONFIG_PROJECT_PHY
  79. struct u2phy_reg_e *u2phy_regs_e;
  80. struct u3phya_reg_e *u3phya_regs_e;
  81. struct u3phya_da_reg_e *u3phya_da_regs_e;
  82. struct u3phyd_reg_e *u3phyd_regs_e;
  83. struct u3phyd_bank2_reg_e *u3phyd_bank2_regs_e;
  84. struct sifslv_chip_reg_e *sifslv_chip_regs_e;
  85. struct spllc_reg_e *spllc_regs_e;
  86. struct sifslv_fm_feg_e *sifslv_fm_regs_e;
  87. #else
  88. #ifdef CONFIG_C60802_SUPPORT
  89. /* c60802 regs reference */
  90. struct u2phy_reg_c *u2phy_regs_c;
  91. struct u3phya_reg_c *u3phya_regs_c;
  92. struct u3phya_da_reg_c *u3phya_da_regs_c;
  93. struct u3phyd_reg_c *u3phyd_regs_c;
  94. struct u3phyd_bank2_reg_c *u3phyd_bank2_regs_c;
  95. struct sifslv_chip_reg_c *sifslv_chip_regs_c;
  96. struct sifslv_fm_feg_c *sifslv_fm_regs_c;
  97. #endif
  98. #ifdef CONFIG_D60802_SUPPORT
  99. /* d60802 regs reference */
  100. struct u2phy_reg_d *u2phy_regs_d;
  101. struct u3phya_reg_d *u3phya_regs_d;
  102. struct u3phya_da_reg_d *u3phya_da_regs_d;
  103. struct u3phyd_reg_d *u3phyd_regs_d;
  104. struct u3phyd_bank2_reg_d *u3phyd_bank2_regs_d;
  105. struct sifslv_chip_reg_d *sifslv_chip_regs_d;
  106. struct sifslv_fm_feg_d *sifslv_fm_regs_d;
  107. #endif
  108. #ifdef CONFIG_E60802_SUPPORT
  109. /* e60802 regs reference */
  110. struct u2phy_reg_e *u2phy_regs_e;
  111. struct u3phya_reg_e *u3phya_regs_e;
  112. struct u3phya_da_reg_e *u3phya_da_regs_e;
  113. struct u3phyd_reg_e *u3phyd_regs_e;
  114. struct u3phyd_bank2_reg_e *u3phyd_bank2_regs_e;
  115. struct sifslv_chip_reg_e *sifslv_chip_regs_e;
  116. struct spllc_reg_e *spllc_regs_e;
  117. struct sifslv_fm_feg_e *sifslv_fm_regs_e;
  118. #endif
  119. #ifdef CONFIG_A60810_SUPPORT
  120. /* A60810 regs reference */
  121. struct u2phy_reg_a *u2phy_regs_a;
  122. struct u3phya_reg_a *u3phya_regs_a;
  123. struct u3phya_da_reg_a *u3phya_da_regs_a;
  124. struct u3phyd_reg_a *u3phyd_regs_a;
  125. struct u3phyd_bank2_reg_a *u3phyd_bank2_regs_a;
  126. struct sifslv_chip_reg_a *sifslv_chip_regs_a;
  127. struct spllc_reg_a *spllc_regs_a;
  128. struct sifslv_fm_reg_a *sifslv_fm_regs_a;
  129. #endif
  130. #endif
  131. };
  132. struct u3phy_operator {
  133. PHY_INT32(*init)(struct u3phy_info *info);
  134. PHY_INT32(*change_pipe_phase)(struct u3phy_info *info, PHY_INT32 phy_drv,
  135. PHY_INT32 pipe_phase);
  136. PHY_INT32(*eyescan_init)(struct u3phy_info *info);
  137. PHY_INT32(*eyescan)(struct u3phy_info *info, PHY_INT32 x_t1, PHY_INT32 y_t1,
  138. PHY_INT32 x_br, PHY_INT32 y_br, PHY_INT32 delta_x, PHY_INT32 delta_y,
  139. PHY_INT32 eye_cnt, PHY_INT32 num_cnt, PHY_INT32 PI_cal_en,
  140. PHY_INT32 num_ignore_cnt);
  141. PHY_INT32(*u2_connect)(struct u3phy_info *info);
  142. PHY_INT32(*u2_disconnect)(struct u3phy_info *info);
  143. PHY_INT32(*u2_save_current_entry)(struct u3phy_info *info);
  144. PHY_INT32(*u2_save_current_recovery)(struct u3phy_info *info);
  145. PHY_INT32(*u2_slew_rate_calibration)(struct u3phy_info *info);
  146. };
  147. #undef EXTERN
  148. #ifdef U3_PHY_LIB
  149. #define EXTERN
  150. #else
  151. #define EXTERN \
  152. extern
  153. #endif
  154. EXTERN struct u3phy_info *u3phy;
  155. EXTERN struct u3phy_operator *u3phy_ops;
  156. /*********eye scan required*********/
  157. #define LO_BYTE(x) ((PHY_UINT8)((x) & 0xFF))
  158. #define HI_BYTE(x) ((PHY_UINT8)(((x) & 0xFF00) >> 8))
  159. typedef enum {
  160. SCAN_UP,
  161. SCAN_DN
  162. } enumScanDir;
  163. struct strucScanRegion {
  164. PHY_INT8 bX_tl;
  165. PHY_INT8 bY_tl;
  166. PHY_INT8 bX_br;
  167. PHY_INT8 bY_br;
  168. PHY_INT8 bDeltaX;
  169. PHY_INT8 bDeltaY;
  170. };
  171. struct strucTestCycle {
  172. PHY_UINT16 wEyeCnt;
  173. PHY_INT8 bNumOfEyeCnt;
  174. PHY_INT8 bPICalEn;
  175. PHY_INT8 bNumOfIgnoreCnt;
  176. };
  177. #define ERRCNT_MAX 128
  178. #define CYCLE_COUNT_MAX 15
  179. /* / the map resolution is 128 x 128 pts */
  180. #define MAX_X 127
  181. #define MAX_Y 127
  182. #define MIN_X 0
  183. #define MIN_Y 0
  184. PHY_INT32 u3phy_init(void);
  185. EXTERN struct strucScanRegion _rEye1;
  186. EXTERN struct strucScanRegion _rEye2;
  187. EXTERN struct strucTestCycle _rTestCycle;
  188. EXTERN PHY_UINT8 _bXcurr;
  189. EXTERN PHY_UINT8 _bYcurr;
  190. EXTERN enumScanDir _eScanDir;
  191. EXTERN PHY_INT8 _fgXChged;
  192. EXTERN unsigned int _bPIResult;
  193. /* Comment for saving the kernel size. This's only used at external PHY*/
  194. #ifdef CONFIG_U3_PHY_GPIO_SUPPORT
  195. EXTERN PHY_UINT32 pwErrCnt0[CYCLE_COUNT_MAX][ERRCNT_MAX][ERRCNT_MAX];
  196. EXTERN PHY_UINT32 pwErrCnt1[CYCLE_COUNT_MAX][ERRCNT_MAX][ERRCNT_MAX];
  197. #endif
  198. extern void phy_hsrx_set(void);
  199. /***********************************/
  200. extern void __iomem *ap_uart0_base;
  201. #ifdef CONFIG_MTK_FPGA
  202. extern void __iomem *i2c1_base;
  203. #endif
  204. /***********************************/
  205. #endif