xhci-mtk-driver.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #ifndef _XHCI_MTK_H
  2. #define _XHCI_MTK_H
  3. #include <linux/usb.h>
  4. #include "mtk-phy.h"
  5. #define _SSUSB_U3_MAC_BASE(mac_base) (mac_base + (unsigned long)0x2400)
  6. #define SSUSB_U3_MAC_BASE _SSUSB_U3_MAC_BASE(mtk_xhci->base_regs)
  7. #define _SSUSB_U3_SYS_BASE(mac_base) (mac_base + (unsigned long)0x2600)
  8. #define SSUSB_U3_SYS_BASE _SSUSB_U3_SYS_BASE(mtk_xhci->base_regs)
  9. #define _SSUSB_U2_SYS_BASE(mac_base) (mac_base + (unsigned long)0x3400)
  10. #define SSUSB_U2_SYS_BASE _SSUSB_U2_SYS_BASE(mtk_xhci->base_regs)
  11. /* ref doc ssusb_xHCI_exclude_port_csr.xlsx */
  12. #define _SSUSB_XHCI_EXCLUDE_BASE(mac_base) (mac_base + 0x900)
  13. #define SSUSB_XHCI_EXCLUDE_BASE _SSUSB_XHCI_EXCLUDE_BASE(mtk_xhci->base_regs)
  14. #define SIFSLV_IPPC_OFFSET 0x700
  15. #define _U3_PIPE_LATCH_SEL_ADD(mac_base) (_SSUSB_U3_MAC_BASE(mac_base) + (unsigned long)0x130)
  16. #define U3_PIPE_LATCH_SEL_ADD _U3_PIPE_LATCH_SEL_ADD(mtk_xhci->base_regs)
  17. #define U3_PIPE_LATCH_TX 0
  18. #define U3_PIPE_LATCH_RX 0
  19. #define U3_UX_EXIT_LFPS_TIMING_PAR 0xa0
  20. #define U3_REF_CK_PAR 0xb0
  21. #define U3_RX_UX_EXIT_LFPS_REF_OFFSET 8
  22. #define U3_RX_UX_EXIT_LFPS_REF 3
  23. #define U3_REF_CK_VAL 10
  24. #define U3_TIMING_PULSE_CTRL 0xb4
  25. /* 62.5MHz:63, 70MHz:70, 80MHz:80, 100MHz:100, 125MHz:125 */
  26. #define MTK_CNT_1US_VALUE 63
  27. #define USB20_TIMING_PARAMETER 0x40
  28. /* 62.5MHz:63, 80MHz:80, 100MHz:100, 125MHz:125 */
  29. #define MTK_TIME_VALUE_1US 63
  30. #define LINK_PM_TIMER 0x8
  31. #define MTK_PM_LC_TIMEOUT_VALUE 3
  32. #define _SSUSB_IP_PW_CTRL(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x0))
  33. #define SSUSB_IP_PW_CTRL _SSUSB_IP_PW_CTRL(mtk_xhci->sif_regs)
  34. /* #define SSUSB_IP_SW_RST (1<<0) */
  35. #define _SSUSB_IP_PW_CTRL_1(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x4))
  36. #define SSUSB_IP_PW_CTRL_1 _SSUSB_IP_PW_CTRL_1(mtk_xhci->sif_regs)
  37. #define SSUSB_IP_PDN (1<<0)
  38. #define _SSUSB_IP_PW_STS1(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x10))
  39. #define SSUSB_IP_PW_STS1 _SSUSB_IP_PW_STS1(mtk_xhci->sif_regs)
  40. /* #define SSUSB_SYS125_RST_B_STS (0x1<<10) */
  41. /* #define SSUSB_U3_MAC_RST_B_STS (0x1<<16) */
  42. #define _SSUSB_IP_PW_STS2(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x14))
  43. #define SSUSB_IP_PW_STS2 _SSUSB_IP_PW_STS2(mtk_xhci->sif_regs)
  44. /* #define SSUSB_U2_MAC_SYS_RST_B_STS (0x1<<0) */
  45. #define _SSUSB_OTG_STS(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x18))
  46. #define SSUSB_OTG_STS _SSUSB_OTG_STS(mtk_xhci->sif_regs)
  47. /* #define SSUSB_IDDIG (1 << 10) */
  48. #define _SSUSB_U3_CTRL(sif_base, p) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x30+(p*0x08)))
  49. #define SSUSB_U3_CTRL(p) _SSUSB_U3_CTRL(mtk_xhci->sif_regs, p)
  50. /* #define SSUSB_U3_PORT_DIS (1<<0) */
  51. /* #define SSUSB_U3_PORT_PDN (1<<1) */
  52. /* #define SSUSB_U3_PORT_HOST_SEL (1<<2) */
  53. /* #define SSUSB_U3_PORT_CKBG_EN (1<<3) */
  54. /* #define SSUSB_U3_PORT_MAC_RST (1<<4) */
  55. /* #define SSUSB_U3_PORT_PHYD_RST (1<<5) */
  56. #define _SSUSB_U2_CTRL(sif_base, p) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+(0x50)+(p*0x08)))
  57. #define SSUSB_U2_CTRL(p) _SSUSB_U2_CTRL(mtk_xhci->sif_regs, p)
  58. /* #define SSUSB_U2_PORT_DIS (1<<0) */
  59. /* #define SSUSB_U2_PORT_PDN (1<<1) */
  60. /* #define SSUSB_U2_PORT_HOST_SEL (1<<2) */
  61. /* #define SSUSB_U2_PORT_CKBG_EN (1<<3) */
  62. /* #define SSUSB_U2_PORT_MAC_RST (1<<4) */
  63. /* #define SSUSB_U2_PORT_PHYD_RST (1<<5) */
  64. #define _SSUSB_IP_CAP(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x024))
  65. #define SSUSB_IP_CAP _SSUSB_IP_CAP(mtk_xhci->sif_regs)
  66. #define SSUSB_U3_PORT_NUM(p) (p & 0xff)
  67. #define SSUSB_U2_PORT_NUM(p) ((p>>8) & 0xff)
  68. #define _SSUSB_SYS_CK_CTRL(sif_base) (sif_base + (unsigned long)(SIFSLV_IPPC_OFFSET+0x009C))
  69. #define SSUSB_SYS_CK_CTRL _SSUSB_SYS_CK_CTRL(mtk_xhci->sif_regs)
  70. #define SSUSB_SYS_CK_DIV2_EN (0x1<<0)
  71. /* ref doc ssusb_xHCI_exclude_port_csr.xlsx */
  72. #define _SSUSB_XHCI_HDMA_CFG(mac_base) (_SSUSB_XHCI_EXCLUDE_BASE(mac_base) + (unsigned long)0x50)
  73. #define SSUSB_XHCI_HDMA_CFG _SSUSB_XHCI_HDMA_CFG(mtk_xhci->base_regs)
  74. #define _SSUSB_XHCI_U2PORT_CFG(base) (_SSUSB_XHCI_EXCLUDE_BASE(base) + (unsigned long)0x78)
  75. #define SSUSB_XHCI_U2PORT_CFG _SSUSB_XHCI_U2PORT_CFG(mtk_xhci->base_regs)
  76. #define _SSUSB_XHCI_HSCH_CFG2(base) (_SSUSB_XHCI_EXCLUDE_BASE(base) + (unsigned long)0x7c)
  77. #define SSUSB_XHCI_HSCH_CFG2 _SSUSB_XHCI_HSCH_CFG2(mtk_xhci->base_regs)
  78. #define XHCI_DRIVER_NAME "xhci"
  79. #define XHCI_BASE_REGS_ADDR_RES_NAME "ssusb_base"
  80. #define XHCI_SIF_REGS_ADDR_RES_NAME "ssusb_sif"
  81. #define XHCI_SIF2_REGS_ADDR_RES_NAME "ssusb_sif2"
  82. extern struct xhci_hcd *mtk_xhci;
  83. extern int mtk_xhci_ip_init(struct usb_hcd *hcd, struct xhci_hcd *xhci);
  84. extern void mtk_xhci_ck_timer_init(struct xhci_hcd *);
  85. void mtk_xhci_set(struct usb_hcd *hcd, struct xhci_hcd *xhci);
  86. void mtk_xhci_reset(struct xhci_hcd *xhci);
  87. extern bool mtk_is_host_mode(void);
  88. #ifdef CONFIG_USB_MTK_DUALMODE
  89. extern int mtk_xhci_eint_iddig_init(void);
  90. extern void mtk_xhci_switch_init(void);
  91. extern void mtk_xhci_eint_iddig_deinit(void);
  92. extern void mtk_ep_count_inc(void);
  93. extern void mtk_ep_count_dec(void);
  94. extern bool musb_check_ipo_state(void);
  95. #endif
  96. extern int xhci_attrs_init(void);
  97. extern void xhci_attrs_exit(void);
  98. extern void mtk_xhci_wakelock_init(void);
  99. extern void mtk_xhci_wakelock_lock(void);
  100. extern void mtk_xhci_wakelock_unlock(void);
  101. /*
  102. mediatek probe out
  103. */
  104. /************************************************************************************/
  105. #define _SW_PRB_OUT_ADDR(sif_base) ((unsigned long)(sif_base + SIFSLV_IPPC_OFFSET + 0xc0))
  106. #define SW_PRB_OUT_ADDR ((unsigned long)_SW_PRB_OUT_ADDR(mtk_xhci->sif_regs))
  107. #define _PRB_MODULE_SEL_ADDR(sif_base) ((unsigned long)(sif_base + SIFSLV_IPPC_OFFSET + 0xbc))
  108. #define PRB_MODULE_SEL_ADDR ((unsigned long)_PRB_MODULE_SEL_ADDR(mtk_xhci->sif_regs))
  109. static inline void mtk_probe_init(const u32 byte)
  110. {
  111. void __iomem *ptr = (void __iomem *)_PRB_MODULE_SEL_ADDR(mtk_xhci->sif_regs);
  112. writel(byte, ptr);
  113. }
  114. static inline void mtk_probe_out(const u32 value)
  115. {
  116. void __iomem *ptr = (void __iomem *)_SW_PRB_OUT_ADDR(mtk_xhci->sif_regs);
  117. writel(value, ptr);
  118. }
  119. static inline u32 mtk_probe_value(void)
  120. {
  121. void __iomem *ptr = (void __iomem *) _SW_PRB_OUT_ADDR(mtk_xhci->sif_regs);
  122. return readl(ptr);
  123. }
  124. #endif