phy-mtk-tphy.c 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2015 MediaTek Inc.
  4. * Author: Chunfeng Yun <chunfeng.yun@mediatek.com>
  5. *
  6. */
  7. #include <dt-bindings/phy/phy.h>
  8. #include <linux/clk.h>
  9. #include <linux/debugfs.h>
  10. #include <linux/delay.h>
  11. #include <linux/iopoll.h>
  12. #include <linux/mfd/syscon.h>
  13. #include <linux/module.h>
  14. #include <linux/nvmem-consumer.h>
  15. #include <linux/of.h>
  16. #include <linux/of_address.h>
  17. #include <linux/phy/phy.h>
  18. #include <linux/platform_device.h>
  19. #include <linux/regmap.h>
  20. #include "phy-mtk-io.h"
  21. /* version V1 sub-banks offset base address */
  22. /* banks shared by multiple phys */
  23. #define SSUSB_SIFSLV_V1_SPLLC 0x000 /* shared by u3 phys */
  24. #define SSUSB_SIFSLV_V1_U2FREQ 0x100 /* shared by u2 phys */
  25. #define SSUSB_SIFSLV_V1_CHIP 0x300 /* shared by u3 phys */
  26. /* u2 phy bank */
  27. #define SSUSB_SIFSLV_V1_U2PHY_COM 0x000
  28. /* u3/pcie/sata phy banks */
  29. #define SSUSB_SIFSLV_V1_U3PHYD 0x000
  30. #define SSUSB_SIFSLV_V1_U3PHYA 0x200
  31. /* version V2/V3 sub-banks offset base address */
  32. /* V3: U2FREQ is not used anymore, but reserved */
  33. /* u2 phy banks */
  34. #define SSUSB_SIFSLV_V2_MISC 0x000
  35. #define SSUSB_SIFSLV_V2_U2FREQ 0x100
  36. #define SSUSB_SIFSLV_V2_U2PHY_COM 0x300
  37. /* u3/pcie/sata phy banks */
  38. #define SSUSB_SIFSLV_V2_SPLLC 0x000
  39. #define SSUSB_SIFSLV_V2_CHIP 0x100
  40. #define SSUSB_SIFSLV_V2_U3PHYD 0x200
  41. #define SSUSB_SIFSLV_V2_U3PHYA 0x400
  42. #define U3P_MISC_REG1 0x04
  43. #define MR1_EFUSE_AUTO_LOAD_DIS BIT(6)
  44. #define U3P_USBPHYACR0 0x000
  45. #define PA0_RG_U2PLL_FORCE_ON BIT(15)
  46. #define PA0_USB20_PLL_PREDIV GENMASK(7, 6)
  47. #define PA0_RG_USB20_INTR_EN BIT(5)
  48. #define U3P_USBPHYACR1 0x004
  49. #define PA1_RG_INTR_CAL GENMASK(23, 19)
  50. #define PA1_RG_VRT_SEL GENMASK(14, 12)
  51. #define PA1_RG_TERM_SEL GENMASK(10, 8)
  52. #define U3P_USBPHYACR2 0x008
  53. #define PA2_RG_U2PLL_BW GENMASK(21, 19)
  54. #define PA2_RG_SIF_U2PLL_FORCE_EN BIT(18)
  55. #define U3P_USBPHYACR5 0x014
  56. #define PA5_RG_U2_HSTX_SRCAL_EN BIT(15)
  57. #define PA5_RG_U2_HSTX_SRCTRL GENMASK(14, 12)
  58. #define PA5_RG_U2_HS_100U_U3_EN BIT(11)
  59. #define U3P_USBPHYACR6 0x018
  60. #define PA6_RG_U2_PRE_EMP GENMASK(31, 30)
  61. #define PA6_RG_U2_BC11_SW_EN BIT(23)
  62. #define PA6_RG_U2_OTG_VBUSCMP_EN BIT(20)
  63. #define PA6_RG_U2_DISCTH GENMASK(7, 4)
  64. #define PA6_RG_U2_SQTH GENMASK(3, 0)
  65. #define U3P_U2PHYACR4 0x020
  66. #define P2C_RG_USB20_GPIO_CTL BIT(9)
  67. #define P2C_USB20_GPIO_MODE BIT(8)
  68. #define P2C_U2_GPIO_CTR_MSK (P2C_RG_USB20_GPIO_CTL | P2C_USB20_GPIO_MODE)
  69. #define U3P_U2PHYA_RESV 0x030
  70. #define P2R_RG_U2PLL_FBDIV_26M 0x1bb13b
  71. #define P2R_RG_U2PLL_FBDIV_48M 0x3c0000
  72. #define U3P_U2PHYA_RESV1 0x044
  73. #define P2R_RG_U2PLL_REFCLK_SEL BIT(5)
  74. #define P2R_RG_U2PLL_FRA_EN BIT(3)
  75. #define U3D_U2PHYDCR0 0x060
  76. #define P2C_RG_SIF_U2PLL_FORCE_ON BIT(24)
  77. #define U3P_U2PHYDTM0 0x068
  78. #define P2C_FORCE_UART_EN BIT(26)
  79. #define P2C_FORCE_DATAIN BIT(23)
  80. #define P2C_FORCE_DM_PULLDOWN BIT(21)
  81. #define P2C_FORCE_DP_PULLDOWN BIT(20)
  82. #define P2C_FORCE_XCVRSEL BIT(19)
  83. #define P2C_FORCE_SUSPENDM BIT(18)
  84. #define P2C_FORCE_TERMSEL BIT(17)
  85. #define P2C_RG_DATAIN GENMASK(13, 10)
  86. #define P2C_RG_DMPULLDOWN BIT(7)
  87. #define P2C_RG_DPPULLDOWN BIT(6)
  88. #define P2C_RG_XCVRSEL GENMASK(5, 4)
  89. #define P2C_RG_SUSPENDM BIT(3)
  90. #define P2C_RG_TERMSEL BIT(2)
  91. #define P2C_DTM0_PART_MASK \
  92. (P2C_FORCE_DATAIN | P2C_FORCE_DM_PULLDOWN | \
  93. P2C_FORCE_DP_PULLDOWN | P2C_FORCE_XCVRSEL | \
  94. P2C_FORCE_TERMSEL | P2C_RG_DMPULLDOWN | \
  95. P2C_RG_DPPULLDOWN | P2C_RG_TERMSEL)
  96. #define U3P_U2PHYDTM1 0x06C
  97. #define P2C_RG_UART_EN BIT(16)
  98. #define P2C_FORCE_IDDIG BIT(9)
  99. #define P2C_RG_VBUSVALID BIT(5)
  100. #define P2C_RG_SESSEND BIT(4)
  101. #define P2C_RG_AVALID BIT(2)
  102. #define P2C_RG_IDDIG BIT(1)
  103. #define U3P_U2PHYBC12C 0x080
  104. #define P2C_RG_CHGDT_EN BIT(0)
  105. #define U3P_U3_CHIP_GPIO_CTLD 0x0c
  106. #define P3C_REG_IP_SW_RST BIT(31)
  107. #define P3C_MCU_BUS_CK_GATE_EN BIT(30)
  108. #define P3C_FORCE_IP_SW_RST BIT(29)
  109. #define U3P_U3_CHIP_GPIO_CTLE 0x10
  110. #define P3C_RG_SWRST_U3_PHYD BIT(25)
  111. #define P3C_RG_SWRST_U3_PHYD_FORCE_EN BIT(24)
  112. #define U3P_U3_PHYA_REG0 0x000
  113. #define P3A_RG_IEXT_INTR GENMASK(15, 10)
  114. #define P3A_RG_CLKDRV_OFF GENMASK(3, 2)
  115. #define U3P_U3_PHYA_REG1 0x004
  116. #define P3A_RG_CLKDRV_AMP GENMASK(31, 29)
  117. #define U3P_U3_PHYA_REG6 0x018
  118. #define P3A_RG_TX_EIDLE_CM GENMASK(31, 28)
  119. #define U3P_U3_PHYA_REG9 0x024
  120. #define P3A_RG_RX_DAC_MUX GENMASK(5, 1)
  121. #define U3P_U3_PHYA_DA_REG0 0x100
  122. #define P3A_RG_XTAL_EXT_PE2H GENMASK(17, 16)
  123. #define P3A_RG_XTAL_EXT_PE1H GENMASK(13, 12)
  124. #define P3A_RG_XTAL_EXT_EN_U3 GENMASK(11, 10)
  125. #define U3P_U3_PHYA_DA_REG4 0x108
  126. #define P3A_RG_PLL_DIVEN_PE2H GENMASK(21, 19)
  127. #define P3A_RG_PLL_BC_PE2H GENMASK(7, 6)
  128. #define U3P_U3_PHYA_DA_REG5 0x10c
  129. #define P3A_RG_PLL_BR_PE2H GENMASK(29, 28)
  130. #define P3A_RG_PLL_IC_PE2H GENMASK(15, 12)
  131. #define U3P_U3_PHYA_DA_REG6 0x110
  132. #define P3A_RG_PLL_IR_PE2H GENMASK(19, 16)
  133. #define U3P_U3_PHYA_DA_REG7 0x114
  134. #define P3A_RG_PLL_BP_PE2H GENMASK(19, 16)
  135. #define U3P_U3_PHYA_DA_REG20 0x13c
  136. #define P3A_RG_PLL_DELTA1_PE2H GENMASK(31, 16)
  137. #define U3P_U3_PHYA_DA_REG25 0x148
  138. #define P3A_RG_PLL_DELTA_PE2H GENMASK(15, 0)
  139. #define U3P_U3_PHYD_LFPS1 0x00c
  140. #define P3D_RG_FWAKE_TH GENMASK(21, 16)
  141. #define U3P_U3_PHYD_IMPCAL0 0x010
  142. #define P3D_RG_FORCE_TX_IMPEL BIT(31)
  143. #define P3D_RG_TX_IMPEL GENMASK(28, 24)
  144. #define U3P_U3_PHYD_IMPCAL1 0x014
  145. #define P3D_RG_FORCE_RX_IMPEL BIT(31)
  146. #define P3D_RG_RX_IMPEL GENMASK(28, 24)
  147. #define U3P_U3_PHYD_RSV 0x054
  148. #define P3D_RG_EFUSE_AUTO_LOAD_DIS BIT(12)
  149. #define U3P_U3_PHYD_CDR1 0x05c
  150. #define P3D_RG_CDR_BIR_LTD1 GENMASK(28, 24)
  151. #define P3D_RG_CDR_BIR_LTD0 GENMASK(12, 8)
  152. #define U3P_U3_PHYD_TOP1 0x100
  153. #define P3D_RG_PHY_MODE GENMASK(2, 1)
  154. #define P3D_RG_FORCE_PHY_MODE BIT(0)
  155. #define U3P_U3_PHYD_RXDET1 0x128
  156. #define P3D_RG_RXDET_STB2_SET GENMASK(17, 9)
  157. #define U3P_U3_PHYD_RXDET2 0x12c
  158. #define P3D_RG_RXDET_STB2_SET_P3 GENMASK(8, 0)
  159. #define U3P_SPLLC_XTALCTL3 0x018
  160. #define XC3_RG_U3_XTAL_RX_PWD BIT(9)
  161. #define XC3_RG_U3_FRC_XTAL_RX_PWD BIT(8)
  162. #define U3P_U2FREQ_FMCR0 0x00
  163. #define P2F_RG_MONCLK_SEL GENMASK(27, 26)
  164. #define P2F_RG_FREQDET_EN BIT(24)
  165. #define P2F_RG_CYCLECNT GENMASK(23, 0)
  166. #define U3P_U2FREQ_VALUE 0x0c
  167. #define U3P_U2FREQ_FMMONR1 0x10
  168. #define P2F_USB_FM_VALID BIT(0)
  169. #define P2F_RG_FRCK_EN BIT(8)
  170. #define U3P_SR_COEF_DIVISOR 1000
  171. #define U3P_FM_DET_CYCLE_CNT 1024
  172. /* SATA register setting */
  173. #define PHYD_CTRL_SIGNAL_MODE4 0x1c
  174. /* CDR Charge Pump P-path current adjustment */
  175. #define RG_CDR_BICLTD1_GEN1_MSK GENMASK(23, 20)
  176. #define RG_CDR_BICLTD0_GEN1_MSK GENMASK(11, 8)
  177. #define PHYD_DESIGN_OPTION2 0x24
  178. /* Symbol lock count selection */
  179. #define RG_LOCK_CNT_SEL_MSK GENMASK(5, 4)
  180. #define PHYD_DESIGN_OPTION9 0x40
  181. /* COMWAK GAP width window */
  182. #define RG_TG_MAX_MSK GENMASK(20, 16)
  183. /* COMINIT GAP width window */
  184. #define RG_T2_MAX_MSK GENMASK(13, 8)
  185. /* COMWAK GAP width window */
  186. #define RG_TG_MIN_MSK GENMASK(7, 5)
  187. /* COMINIT GAP width window */
  188. #define RG_T2_MIN_MSK GENMASK(4, 0)
  189. #define ANA_RG_CTRL_SIGNAL1 0x4c
  190. /* TX driver tail current control for 0dB de-empahsis mdoe for Gen1 speed */
  191. #define RG_IDRV_0DB_GEN1_MSK GENMASK(13, 8)
  192. #define ANA_RG_CTRL_SIGNAL4 0x58
  193. #define RG_CDR_BICLTR_GEN1_MSK GENMASK(23, 20)
  194. /* Loop filter R1 resistance adjustment for Gen1 speed */
  195. #define RG_CDR_BR_GEN2_MSK GENMASK(10, 8)
  196. #define ANA_RG_CTRL_SIGNAL6 0x60
  197. /* I-path capacitance adjustment for Gen1 */
  198. #define RG_CDR_BC_GEN1_MSK GENMASK(28, 24)
  199. #define RG_CDR_BIRLTR_GEN1_MSK GENMASK(4, 0)
  200. #define ANA_EQ_EYE_CTRL_SIGNAL1 0x6c
  201. /* RX Gen1 LEQ tuning step */
  202. #define RG_EQ_DLEQ_LFI_GEN1_MSK GENMASK(11, 8)
  203. #define ANA_EQ_EYE_CTRL_SIGNAL4 0xd8
  204. #define RG_CDR_BIRLTD0_GEN1_MSK GENMASK(20, 16)
  205. #define ANA_EQ_EYE_CTRL_SIGNAL5 0xdc
  206. #define RG_CDR_BIRLTD0_GEN3_MSK GENMASK(4, 0)
  207. /* PHY switch between pcie/usb3/sgmii/sata */
  208. #define USB_PHY_SWITCH_CTRL 0x0
  209. #define RG_PHY_SW_TYPE GENMASK(3, 0)
  210. #define RG_PHY_SW_PCIE 0x0
  211. #define RG_PHY_SW_USB3 0x1
  212. #define RG_PHY_SW_SGMII 0x2
  213. #define RG_PHY_SW_SATA 0x3
  214. #define TPHY_CLKS_CNT 2
  215. #define USER_BUF_LEN(count) min_t(size_t, 8, (count))
  216. enum mtk_phy_version {
  217. MTK_PHY_V1 = 1,
  218. MTK_PHY_V2,
  219. MTK_PHY_V3,
  220. };
  221. /**
  222. * mtk_phy_pdata - SoC specific platform data
  223. * @avoid_rx_sen_degradation: Avoid TX Sensitivity level degradation (MT6795/8173 only)
  224. * @sw_pll_48m_to_26m: Workaround for V3 IP (MT8195) - switch the 48MHz PLL from
  225. * fractional mode to integer to output 26MHz for U2PHY
  226. * @sw_efuse_supported: Switches off eFuse auto-load from PHY and applies values
  227. * read from different nvmem (usually different eFuse array)
  228. * that is pointed at in the device tree node for this PHY
  229. * @slew_ref_clk_mhz: Default reference clock (in MHz) for slew rate calibration
  230. * @slew_rate_coefficient: Coefficient for slew rate calibration
  231. * @version: PHY IP Version
  232. */
  233. struct mtk_phy_pdata {
  234. bool avoid_rx_sen_degradation;
  235. bool sw_pll_48m_to_26m;
  236. bool sw_efuse_supported;
  237. u8 slew_ref_clock_mhz;
  238. u8 slew_rate_coefficient;
  239. enum mtk_phy_version version;
  240. };
  241. struct u2phy_banks {
  242. void __iomem *misc;
  243. void __iomem *fmreg;
  244. void __iomem *com;
  245. };
  246. struct u3phy_banks {
  247. void __iomem *spllc;
  248. void __iomem *chip;
  249. void __iomem *phyd; /* include u3phyd_bank2 */
  250. void __iomem *phya; /* include u3phya_da */
  251. };
  252. struct mtk_phy_instance {
  253. struct phy *phy;
  254. void __iomem *port_base;
  255. union {
  256. struct u2phy_banks u2_banks;
  257. struct u3phy_banks u3_banks;
  258. };
  259. struct clk_bulk_data clks[TPHY_CLKS_CNT];
  260. u32 index;
  261. u32 type;
  262. struct regmap *type_sw;
  263. u32 type_sw_reg;
  264. u32 type_sw_index;
  265. u32 efuse_sw_en;
  266. u32 efuse_intr;
  267. u32 efuse_tx_imp;
  268. u32 efuse_rx_imp;
  269. int eye_src;
  270. int eye_vrt;
  271. int eye_term;
  272. int intr;
  273. int discth;
  274. int pre_emphasis;
  275. bool bc12_en;
  276. bool type_force_mode;
  277. };
  278. struct mtk_tphy {
  279. struct device *dev;
  280. void __iomem *sif_base; /* only shared sif */
  281. const struct mtk_phy_pdata *pdata;
  282. struct mtk_phy_instance **phys;
  283. int nphys;
  284. int src_ref_clk; /* MHZ, reference clock for slew rate calibrate */
  285. int src_coef; /* coefficient for slew rate calibrate */
  286. };
  287. #if IS_ENABLED(CONFIG_DEBUG_FS)
  288. enum u2_phy_params {
  289. U2P_EYE_VRT = 0,
  290. U2P_EYE_TERM,
  291. U2P_EFUSE_EN,
  292. U2P_EFUSE_INTR,
  293. U2P_DISCTH,
  294. U2P_PRE_EMPHASIS,
  295. };
  296. enum u3_phy_params {
  297. U3P_EFUSE_EN = 0,
  298. U3P_EFUSE_INTR,
  299. U3P_EFUSE_TX_IMP,
  300. U3P_EFUSE_RX_IMP,
  301. };
  302. static const char *const u2_phy_files[] = {
  303. [U2P_EYE_VRT] = "vrt",
  304. [U2P_EYE_TERM] = "term",
  305. [U2P_EFUSE_EN] = "efuse",
  306. [U2P_EFUSE_INTR] = "intr",
  307. [U2P_DISCTH] = "discth",
  308. [U2P_PRE_EMPHASIS] = "preemph",
  309. };
  310. static const char *const u3_phy_files[] = {
  311. [U3P_EFUSE_EN] = "efuse",
  312. [U3P_EFUSE_INTR] = "intr",
  313. [U3P_EFUSE_TX_IMP] = "tx-imp",
  314. [U3P_EFUSE_RX_IMP] = "rx-imp",
  315. };
  316. static int u2_phy_params_show(struct seq_file *sf, void *unused)
  317. {
  318. struct mtk_phy_instance *inst = sf->private;
  319. struct u2phy_banks *u2_banks = &inst->u2_banks;
  320. void __iomem *com = u2_banks->com;
  321. u32 max = 0;
  322. u32 tmp = 0;
  323. u32 val = 0;
  324. int ret = debugfs_get_aux_num(sf->file);
  325. switch (ret) {
  326. case U2P_EYE_VRT:
  327. tmp = readl(com + U3P_USBPHYACR1);
  328. val = FIELD_GET(PA1_RG_VRT_SEL, tmp);
  329. max = FIELD_MAX(PA1_RG_VRT_SEL);
  330. break;
  331. case U2P_EYE_TERM:
  332. tmp = readl(com + U3P_USBPHYACR1);
  333. val = FIELD_GET(PA1_RG_TERM_SEL, tmp);
  334. max = FIELD_MAX(PA1_RG_TERM_SEL);
  335. break;
  336. case U2P_EFUSE_EN:
  337. if (u2_banks->misc) {
  338. tmp = readl(u2_banks->misc + U3P_MISC_REG1);
  339. max = 1;
  340. }
  341. val = !!(tmp & MR1_EFUSE_AUTO_LOAD_DIS);
  342. break;
  343. case U2P_EFUSE_INTR:
  344. tmp = readl(com + U3P_USBPHYACR1);
  345. val = FIELD_GET(PA1_RG_INTR_CAL, tmp);
  346. max = FIELD_MAX(PA1_RG_INTR_CAL);
  347. break;
  348. case U2P_DISCTH:
  349. tmp = readl(com + U3P_USBPHYACR6);
  350. val = FIELD_GET(PA6_RG_U2_DISCTH, tmp);
  351. max = FIELD_MAX(PA6_RG_U2_DISCTH);
  352. break;
  353. case U2P_PRE_EMPHASIS:
  354. tmp = readl(com + U3P_USBPHYACR6);
  355. val = FIELD_GET(PA6_RG_U2_PRE_EMP, tmp);
  356. max = FIELD_MAX(PA6_RG_U2_PRE_EMP);
  357. break;
  358. default:
  359. seq_printf(sf, "invalid, %d\n", ret);
  360. break;
  361. }
  362. seq_printf(sf, "%s : %d [0, %d]\n", u2_phy_files[ret], val, max);
  363. return 0;
  364. }
  365. static int u2_phy_params_open(struct inode *inode, struct file *file)
  366. {
  367. return single_open(file, u2_phy_params_show, inode->i_private);
  368. }
  369. static ssize_t u2_phy_params_write(struct file *file, const char __user *ubuf,
  370. size_t count, loff_t *ppos)
  371. {
  372. struct seq_file *sf = file->private_data;
  373. struct mtk_phy_instance *inst = sf->private;
  374. struct u2phy_banks *u2_banks = &inst->u2_banks;
  375. void __iomem *com = u2_banks->com;
  376. ssize_t rc;
  377. u32 val;
  378. int ret = debugfs_get_aux_num(file);
  379. rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val);
  380. if (rc)
  381. return rc;
  382. switch (ret) {
  383. case U2P_EYE_VRT:
  384. mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_VRT_SEL, val);
  385. break;
  386. case U2P_EYE_TERM:
  387. mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_TERM_SEL, val);
  388. break;
  389. case U2P_EFUSE_EN:
  390. if (u2_banks->misc)
  391. mtk_phy_update_field(u2_banks->misc + U3P_MISC_REG1,
  392. MR1_EFUSE_AUTO_LOAD_DIS, !!val);
  393. break;
  394. case U2P_EFUSE_INTR:
  395. mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_INTR_CAL, val);
  396. break;
  397. case U2P_DISCTH:
  398. mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_DISCTH, val);
  399. break;
  400. case U2P_PRE_EMPHASIS:
  401. mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_PRE_EMP, val);
  402. break;
  403. default:
  404. break;
  405. }
  406. return count;
  407. }
  408. static const struct file_operations u2_phy_fops = {
  409. .open = u2_phy_params_open,
  410. .write = u2_phy_params_write,
  411. .read = seq_read,
  412. .llseek = seq_lseek,
  413. .release = single_release,
  414. };
  415. static void u2_phy_dbgfs_files_create(struct mtk_phy_instance *inst)
  416. {
  417. u32 count = ARRAY_SIZE(u2_phy_files);
  418. int i;
  419. for (i = 0; i < count; i++)
  420. debugfs_create_file_aux_num(u2_phy_files[i], 0644, inst->phy->debugfs,
  421. inst, i, &u2_phy_fops);
  422. }
  423. static int u3_phy_params_show(struct seq_file *sf, void *unused)
  424. {
  425. struct mtk_phy_instance *inst = sf->private;
  426. struct u3phy_banks *u3_banks = &inst->u3_banks;
  427. u32 val = 0;
  428. u32 max = 0;
  429. u32 tmp;
  430. int ret = debugfs_get_aux_num(sf->file);
  431. switch (ret) {
  432. case U3P_EFUSE_EN:
  433. tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RSV);
  434. val = !!(tmp & P3D_RG_EFUSE_AUTO_LOAD_DIS);
  435. max = 1;
  436. break;
  437. case U3P_EFUSE_INTR:
  438. tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG0);
  439. val = FIELD_GET(P3A_RG_IEXT_INTR, tmp);
  440. max = FIELD_MAX(P3A_RG_IEXT_INTR);
  441. break;
  442. case U3P_EFUSE_TX_IMP:
  443. tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0);
  444. val = FIELD_GET(P3D_RG_TX_IMPEL, tmp);
  445. max = FIELD_MAX(P3D_RG_TX_IMPEL);
  446. break;
  447. case U3P_EFUSE_RX_IMP:
  448. tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1);
  449. val = FIELD_GET(P3D_RG_RX_IMPEL, tmp);
  450. max = FIELD_MAX(P3D_RG_RX_IMPEL);
  451. break;
  452. default:
  453. seq_printf(sf, "invalid, %d\n", ret);
  454. break;
  455. }
  456. seq_printf(sf, "%s : %d [0, %d]\n", u3_phy_files[ret], val, max);
  457. return 0;
  458. }
  459. static int u3_phy_params_open(struct inode *inode, struct file *file)
  460. {
  461. return single_open(file, u3_phy_params_show, inode->i_private);
  462. }
  463. static ssize_t u3_phy_params_write(struct file *file, const char __user *ubuf,
  464. size_t count, loff_t *ppos)
  465. {
  466. struct seq_file *sf = file->private_data;
  467. struct mtk_phy_instance *inst = sf->private;
  468. struct u3phy_banks *u3_banks = &inst->u3_banks;
  469. void __iomem *phyd = u3_banks->phyd;
  470. ssize_t rc;
  471. u32 val;
  472. int ret = debugfs_get_aux_num(sf->file);
  473. rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val);
  474. if (rc)
  475. return rc;
  476. switch (ret) {
  477. case U3P_EFUSE_EN:
  478. mtk_phy_update_field(phyd + U3P_U3_PHYD_RSV,
  479. P3D_RG_EFUSE_AUTO_LOAD_DIS, !!val);
  480. break;
  481. case U3P_EFUSE_INTR:
  482. mtk_phy_update_field(u3_banks->phya + U3P_U3_PHYA_REG0,
  483. P3A_RG_IEXT_INTR, val);
  484. break;
  485. case U3P_EFUSE_TX_IMP:
  486. mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL0, P3D_RG_TX_IMPEL, val);
  487. mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL0, P3D_RG_FORCE_TX_IMPEL);
  488. break;
  489. case U3P_EFUSE_RX_IMP:
  490. mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL1, P3D_RG_RX_IMPEL, val);
  491. mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL1, P3D_RG_FORCE_RX_IMPEL);
  492. break;
  493. default:
  494. break;
  495. }
  496. return count;
  497. }
  498. static const struct file_operations u3_phy_fops = {
  499. .open = u3_phy_params_open,
  500. .write = u3_phy_params_write,
  501. .read = seq_read,
  502. .llseek = seq_lseek,
  503. .release = single_release,
  504. };
  505. static void u3_phy_dbgfs_files_create(struct mtk_phy_instance *inst)
  506. {
  507. u32 count = ARRAY_SIZE(u3_phy_files);
  508. int i;
  509. for (i = 0; i < count; i++)
  510. debugfs_create_file_aux_num(u3_phy_files[i], 0644, inst->phy->debugfs,
  511. inst, i, &u3_phy_fops);
  512. }
  513. static int phy_type_show(struct seq_file *sf, void *unused)
  514. {
  515. struct mtk_phy_instance *inst = sf->private;
  516. const char *type;
  517. switch (inst->type) {
  518. case PHY_TYPE_USB2:
  519. type = "USB2";
  520. break;
  521. case PHY_TYPE_USB3:
  522. type = "USB3";
  523. break;
  524. case PHY_TYPE_PCIE:
  525. type = "PCIe";
  526. break;
  527. case PHY_TYPE_SGMII:
  528. type = "SGMII";
  529. break;
  530. case PHY_TYPE_SATA:
  531. type = "SATA";
  532. break;
  533. default:
  534. type = "";
  535. }
  536. seq_printf(sf, "%s\n", type);
  537. return 0;
  538. }
  539. DEFINE_SHOW_ATTRIBUTE(phy_type);
  540. /* these files will be removed when phy is released by phy core */
  541. static void phy_debugfs_init(struct mtk_phy_instance *inst)
  542. {
  543. debugfs_create_file("type", 0444, inst->phy->debugfs, inst, &phy_type_fops);
  544. switch (inst->type) {
  545. case PHY_TYPE_USB2:
  546. u2_phy_dbgfs_files_create(inst);
  547. break;
  548. case PHY_TYPE_USB3:
  549. case PHY_TYPE_PCIE:
  550. u3_phy_dbgfs_files_create(inst);
  551. break;
  552. default:
  553. break;
  554. }
  555. }
  556. #else
  557. static void phy_debugfs_init(struct mtk_phy_instance *inst)
  558. {}
  559. #endif
  560. static void hs_slew_rate_calibrate(struct mtk_tphy *tphy,
  561. struct mtk_phy_instance *instance)
  562. {
  563. struct u2phy_banks *u2_banks = &instance->u2_banks;
  564. void __iomem *fmreg = u2_banks->fmreg;
  565. void __iomem *com = u2_banks->com;
  566. int calibration_val;
  567. int fm_out;
  568. u32 tmp;
  569. /*
  570. * If a fixed HS slew rate (EYE) value was supplied, don't run the
  571. * calibration sequence and prefer using that value instead; also,
  572. * if there is no reference clock for slew calibration or there is
  573. * no slew coefficient, this means that the slew rate calibration
  574. * sequence is not supported.
  575. */
  576. if (instance->eye_src || !tphy->src_ref_clk || !tphy->src_coef)
  577. return;
  578. /* enable USB ring oscillator */
  579. mtk_phy_set_bits(com + U3P_USBPHYACR5, PA5_RG_U2_HSTX_SRCAL_EN);
  580. udelay(1);
  581. /*enable free run clock */
  582. mtk_phy_set_bits(fmreg + U3P_U2FREQ_FMMONR1, P2F_RG_FRCK_EN);
  583. /* set cycle count as 1024, and select u2 channel */
  584. tmp = readl(fmreg + U3P_U2FREQ_FMCR0);
  585. tmp &= ~(P2F_RG_CYCLECNT | P2F_RG_MONCLK_SEL);
  586. tmp |= FIELD_PREP(P2F_RG_CYCLECNT, U3P_FM_DET_CYCLE_CNT);
  587. if (tphy->pdata->version == MTK_PHY_V1)
  588. tmp |= FIELD_PREP(P2F_RG_MONCLK_SEL, instance->index >> 1);
  589. writel(tmp, fmreg + U3P_U2FREQ_FMCR0);
  590. /* enable frequency meter */
  591. mtk_phy_set_bits(fmreg + U3P_U2FREQ_FMCR0, P2F_RG_FREQDET_EN);
  592. /* ignore return value */
  593. readl_poll_timeout(fmreg + U3P_U2FREQ_FMMONR1, tmp,
  594. (tmp & P2F_USB_FM_VALID), 10, 200);
  595. fm_out = readl(fmreg + U3P_U2FREQ_VALUE);
  596. /* disable frequency meter */
  597. mtk_phy_clear_bits(fmreg + U3P_U2FREQ_FMCR0, P2F_RG_FREQDET_EN);
  598. /*disable free run clock */
  599. mtk_phy_clear_bits(fmreg + U3P_U2FREQ_FMMONR1, P2F_RG_FRCK_EN);
  600. if (fm_out) {
  601. /* ( 1024 / FM_OUT ) x reference clock frequency x coef */
  602. tmp = tphy->src_ref_clk * tphy->src_coef;
  603. tmp = (tmp * U3P_FM_DET_CYCLE_CNT) / fm_out;
  604. calibration_val = DIV_ROUND_CLOSEST(tmp, U3P_SR_COEF_DIVISOR);
  605. } else {
  606. /* if FM detection fail, set default value */
  607. calibration_val = 4;
  608. }
  609. dev_dbg(tphy->dev, "phy:%d, fm_out:%d, calib:%d (clk:%d, coef:%d)\n",
  610. instance->index, fm_out, calibration_val,
  611. tphy->src_ref_clk, tphy->src_coef);
  612. /* set HS slew rate */
  613. mtk_phy_update_field(com + U3P_USBPHYACR5, PA5_RG_U2_HSTX_SRCTRL,
  614. calibration_val);
  615. /* disable USB ring oscillator */
  616. mtk_phy_clear_bits(com + U3P_USBPHYACR5, PA5_RG_U2_HSTX_SRCAL_EN);
  617. }
  618. static void u3_phy_instance_init(struct mtk_tphy *tphy,
  619. struct mtk_phy_instance *instance)
  620. {
  621. struct u3phy_banks *u3_banks = &instance->u3_banks;
  622. void __iomem *phya = u3_banks->phya;
  623. void __iomem *phyd = u3_banks->phyd;
  624. if (instance->type_force_mode) {
  625. /* force phy as usb mode, default is pcie rc mode */
  626. mtk_phy_update_field(phyd + U3P_U3_PHYD_TOP1, P3D_RG_PHY_MODE, 1);
  627. mtk_phy_set_bits(phyd + U3P_U3_PHYD_TOP1, P3D_RG_FORCE_PHY_MODE);
  628. /* power down phy by ip and pipe reset */
  629. mtk_phy_set_bits(u3_banks->chip + U3P_U3_CHIP_GPIO_CTLD,
  630. P3C_FORCE_IP_SW_RST | P3C_MCU_BUS_CK_GATE_EN);
  631. mtk_phy_set_bits(u3_banks->chip + U3P_U3_CHIP_GPIO_CTLE,
  632. P3C_RG_SWRST_U3_PHYD | P3C_RG_SWRST_U3_PHYD_FORCE_EN);
  633. udelay(10);
  634. /* power on phy again */
  635. mtk_phy_clear_bits(u3_banks->chip + U3P_U3_CHIP_GPIO_CTLD,
  636. P3C_FORCE_IP_SW_RST | P3C_MCU_BUS_CK_GATE_EN);
  637. mtk_phy_clear_bits(u3_banks->chip + U3P_U3_CHIP_GPIO_CTLE,
  638. P3C_RG_SWRST_U3_PHYD | P3C_RG_SWRST_U3_PHYD_FORCE_EN);
  639. }
  640. /* gating PCIe Analog XTAL clock */
  641. mtk_phy_set_bits(u3_banks->spllc + U3P_SPLLC_XTALCTL3,
  642. XC3_RG_U3_XTAL_RX_PWD | XC3_RG_U3_FRC_XTAL_RX_PWD);
  643. /* gating XSQ */
  644. mtk_phy_update_field(phya + U3P_U3_PHYA_DA_REG0, P3A_RG_XTAL_EXT_EN_U3, 2);
  645. mtk_phy_update_field(phya + U3P_U3_PHYA_REG9, P3A_RG_RX_DAC_MUX, 4);
  646. mtk_phy_update_field(phya + U3P_U3_PHYA_REG6, P3A_RG_TX_EIDLE_CM, 0xe);
  647. mtk_phy_update_bits(u3_banks->phyd + U3P_U3_PHYD_CDR1,
  648. P3D_RG_CDR_BIR_LTD0 | P3D_RG_CDR_BIR_LTD1,
  649. FIELD_PREP(P3D_RG_CDR_BIR_LTD0, 0xc) |
  650. FIELD_PREP(P3D_RG_CDR_BIR_LTD1, 0x3));
  651. mtk_phy_update_field(phyd + U3P_U3_PHYD_LFPS1, P3D_RG_FWAKE_TH, 0x34);
  652. mtk_phy_update_field(phyd + U3P_U3_PHYD_RXDET1, P3D_RG_RXDET_STB2_SET, 0x10);
  653. mtk_phy_update_field(phyd + U3P_U3_PHYD_RXDET2, P3D_RG_RXDET_STB2_SET_P3, 0x10);
  654. dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
  655. }
  656. static void u2_phy_pll_26m_set(struct mtk_tphy *tphy,
  657. struct mtk_phy_instance *instance)
  658. {
  659. struct u2phy_banks *u2_banks = &instance->u2_banks;
  660. void __iomem *com = u2_banks->com;
  661. if (!tphy->pdata->sw_pll_48m_to_26m)
  662. return;
  663. mtk_phy_update_field(com + U3P_USBPHYACR0, PA0_USB20_PLL_PREDIV, 0);
  664. mtk_phy_update_field(com + U3P_USBPHYACR2, PA2_RG_U2PLL_BW, 3);
  665. writel(P2R_RG_U2PLL_FBDIV_26M, com + U3P_U2PHYA_RESV);
  666. mtk_phy_set_bits(com + U3P_U2PHYA_RESV1,
  667. P2R_RG_U2PLL_FRA_EN | P2R_RG_U2PLL_REFCLK_SEL);
  668. }
  669. static void u2_phy_instance_init(struct mtk_tphy *tphy,
  670. struct mtk_phy_instance *instance)
  671. {
  672. struct u2phy_banks *u2_banks = &instance->u2_banks;
  673. void __iomem *com = u2_banks->com;
  674. u32 index = instance->index;
  675. /* switch to USB function, and enable usb pll */
  676. mtk_phy_clear_bits(com + U3P_U2PHYDTM0, P2C_FORCE_UART_EN | P2C_FORCE_SUSPENDM);
  677. mtk_phy_clear_bits(com + U3P_U2PHYDTM0,
  678. P2C_RG_XCVRSEL | P2C_RG_DATAIN | P2C_DTM0_PART_MASK);
  679. mtk_phy_clear_bits(com + U3P_U2PHYDTM1, P2C_RG_UART_EN);
  680. mtk_phy_set_bits(com + U3P_USBPHYACR0, PA0_RG_USB20_INTR_EN);
  681. /* disable switch 100uA current to SSUSB */
  682. mtk_phy_clear_bits(com + U3P_USBPHYACR5, PA5_RG_U2_HS_100U_U3_EN);
  683. mtk_phy_clear_bits(com + U3P_U2PHYACR4, P2C_U2_GPIO_CTR_MSK);
  684. if (tphy->pdata->avoid_rx_sen_degradation) {
  685. if (!index) {
  686. mtk_phy_set_bits(com + U3P_USBPHYACR2, PA2_RG_SIF_U2PLL_FORCE_EN);
  687. mtk_phy_clear_bits(com + U3D_U2PHYDCR0, P2C_RG_SIF_U2PLL_FORCE_ON);
  688. } else {
  689. mtk_phy_set_bits(com + U3D_U2PHYDCR0, P2C_RG_SIF_U2PLL_FORCE_ON);
  690. mtk_phy_set_bits(com + U3P_U2PHYDTM0,
  691. P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM);
  692. }
  693. }
  694. /* DP/DM BC1.1 path Disable */
  695. mtk_phy_clear_bits(com + U3P_USBPHYACR6, PA6_RG_U2_BC11_SW_EN);
  696. mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_SQTH, 2);
  697. /* Workaround only for mt8195, HW fix it for others (V3) */
  698. u2_phy_pll_26m_set(tphy, instance);
  699. dev_dbg(tphy->dev, "%s(%d)\n", __func__, index);
  700. }
  701. static void u2_phy_instance_power_on(struct mtk_tphy *tphy,
  702. struct mtk_phy_instance *instance)
  703. {
  704. struct u2phy_banks *u2_banks = &instance->u2_banks;
  705. void __iomem *com = u2_banks->com;
  706. u32 index = instance->index;
  707. /* OTG Enable */
  708. mtk_phy_set_bits(com + U3P_USBPHYACR6, PA6_RG_U2_OTG_VBUSCMP_EN);
  709. mtk_phy_set_bits(com + U3P_U2PHYDTM1, P2C_RG_VBUSVALID | P2C_RG_AVALID);
  710. mtk_phy_clear_bits(com + U3P_U2PHYDTM1, P2C_RG_SESSEND);
  711. if (tphy->pdata->avoid_rx_sen_degradation && index) {
  712. mtk_phy_set_bits(com + U3D_U2PHYDCR0, P2C_RG_SIF_U2PLL_FORCE_ON);
  713. mtk_phy_set_bits(com + U3P_U2PHYDTM0, P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM);
  714. }
  715. dev_dbg(tphy->dev, "%s(%d)\n", __func__, index);
  716. }
  717. static void u2_phy_instance_power_off(struct mtk_tphy *tphy,
  718. struct mtk_phy_instance *instance)
  719. {
  720. struct u2phy_banks *u2_banks = &instance->u2_banks;
  721. void __iomem *com = u2_banks->com;
  722. u32 index = instance->index;
  723. /* OTG Disable */
  724. mtk_phy_clear_bits(com + U3P_USBPHYACR6, PA6_RG_U2_OTG_VBUSCMP_EN);
  725. mtk_phy_clear_bits(com + U3P_U2PHYDTM1, P2C_RG_VBUSVALID | P2C_RG_AVALID);
  726. mtk_phy_set_bits(com + U3P_U2PHYDTM1, P2C_RG_SESSEND);
  727. if (tphy->pdata->avoid_rx_sen_degradation && index) {
  728. mtk_phy_clear_bits(com + U3P_U2PHYDTM0, P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM);
  729. mtk_phy_clear_bits(com + U3D_U2PHYDCR0, P2C_RG_SIF_U2PLL_FORCE_ON);
  730. }
  731. dev_dbg(tphy->dev, "%s(%d)\n", __func__, index);
  732. }
  733. static void u2_phy_instance_exit(struct mtk_tphy *tphy,
  734. struct mtk_phy_instance *instance)
  735. {
  736. struct u2phy_banks *u2_banks = &instance->u2_banks;
  737. void __iomem *com = u2_banks->com;
  738. u32 index = instance->index;
  739. if (tphy->pdata->avoid_rx_sen_degradation && index) {
  740. mtk_phy_clear_bits(com + U3D_U2PHYDCR0, P2C_RG_SIF_U2PLL_FORCE_ON);
  741. mtk_phy_clear_bits(com + U3P_U2PHYDTM0, P2C_FORCE_SUSPENDM);
  742. }
  743. }
  744. static void u2_phy_instance_set_mode(struct mtk_tphy *tphy,
  745. struct mtk_phy_instance *instance,
  746. enum phy_mode mode)
  747. {
  748. struct u2phy_banks *u2_banks = &instance->u2_banks;
  749. u32 tmp;
  750. tmp = readl(u2_banks->com + U3P_U2PHYDTM1);
  751. switch (mode) {
  752. case PHY_MODE_USB_DEVICE:
  753. tmp |= P2C_FORCE_IDDIG | P2C_RG_IDDIG;
  754. break;
  755. case PHY_MODE_USB_HOST:
  756. tmp |= P2C_FORCE_IDDIG;
  757. tmp &= ~P2C_RG_IDDIG;
  758. break;
  759. case PHY_MODE_USB_OTG:
  760. tmp &= ~(P2C_FORCE_IDDIG | P2C_RG_IDDIG);
  761. break;
  762. default:
  763. return;
  764. }
  765. writel(tmp, u2_banks->com + U3P_U2PHYDTM1);
  766. }
  767. static void pcie_phy_instance_init(struct mtk_tphy *tphy,
  768. struct mtk_phy_instance *instance)
  769. {
  770. struct u3phy_banks *u3_banks = &instance->u3_banks;
  771. void __iomem *phya = u3_banks->phya;
  772. if (tphy->pdata->version != MTK_PHY_V1)
  773. return;
  774. mtk_phy_update_bits(phya + U3P_U3_PHYA_DA_REG0,
  775. P3A_RG_XTAL_EXT_PE1H | P3A_RG_XTAL_EXT_PE2H,
  776. FIELD_PREP(P3A_RG_XTAL_EXT_PE1H, 0x2) |
  777. FIELD_PREP(P3A_RG_XTAL_EXT_PE2H, 0x2));
  778. /* ref clk drive */
  779. mtk_phy_update_field(phya + U3P_U3_PHYA_REG1, P3A_RG_CLKDRV_AMP, 0x4);
  780. mtk_phy_update_field(phya + U3P_U3_PHYA_REG0, P3A_RG_CLKDRV_OFF, 0x1);
  781. /* SSC delta -5000ppm */
  782. mtk_phy_update_field(phya + U3P_U3_PHYA_DA_REG20, P3A_RG_PLL_DELTA1_PE2H, 0x3c);
  783. mtk_phy_update_field(phya + U3P_U3_PHYA_DA_REG25, P3A_RG_PLL_DELTA_PE2H, 0x36);
  784. /* change pll BW 0.6M */
  785. mtk_phy_update_bits(phya + U3P_U3_PHYA_DA_REG5,
  786. P3A_RG_PLL_BR_PE2H | P3A_RG_PLL_IC_PE2H,
  787. FIELD_PREP(P3A_RG_PLL_BR_PE2H, 0x1) |
  788. FIELD_PREP(P3A_RG_PLL_IC_PE2H, 0x1));
  789. mtk_phy_update_bits(phya + U3P_U3_PHYA_DA_REG4,
  790. P3A_RG_PLL_DIVEN_PE2H | P3A_RG_PLL_BC_PE2H,
  791. FIELD_PREP(P3A_RG_PLL_BC_PE2H, 0x3));
  792. mtk_phy_update_field(phya + U3P_U3_PHYA_DA_REG6, P3A_RG_PLL_IR_PE2H, 0x2);
  793. mtk_phy_update_field(phya + U3P_U3_PHYA_DA_REG7, P3A_RG_PLL_BP_PE2H, 0xa);
  794. /* Tx Detect Rx Timing: 10us -> 5us */
  795. mtk_phy_update_field(u3_banks->phyd + U3P_U3_PHYD_RXDET1,
  796. P3D_RG_RXDET_STB2_SET, 0x10);
  797. mtk_phy_update_field(u3_banks->phyd + U3P_U3_PHYD_RXDET2,
  798. P3D_RG_RXDET_STB2_SET_P3, 0x10);
  799. /* wait for PCIe subsys register to active */
  800. usleep_range(2500, 3000);
  801. dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
  802. }
  803. static void pcie_phy_instance_power_on(struct mtk_tphy *tphy,
  804. struct mtk_phy_instance *instance)
  805. {
  806. struct u3phy_banks *bank = &instance->u3_banks;
  807. mtk_phy_clear_bits(bank->chip + U3P_U3_CHIP_GPIO_CTLD,
  808. P3C_FORCE_IP_SW_RST | P3C_REG_IP_SW_RST);
  809. mtk_phy_clear_bits(bank->chip + U3P_U3_CHIP_GPIO_CTLE,
  810. P3C_RG_SWRST_U3_PHYD_FORCE_EN | P3C_RG_SWRST_U3_PHYD);
  811. }
  812. static void pcie_phy_instance_power_off(struct mtk_tphy *tphy,
  813. struct mtk_phy_instance *instance)
  814. {
  815. struct u3phy_banks *bank = &instance->u3_banks;
  816. mtk_phy_set_bits(bank->chip + U3P_U3_CHIP_GPIO_CTLD,
  817. P3C_FORCE_IP_SW_RST | P3C_REG_IP_SW_RST);
  818. mtk_phy_set_bits(bank->chip + U3P_U3_CHIP_GPIO_CTLE,
  819. P3C_RG_SWRST_U3_PHYD_FORCE_EN | P3C_RG_SWRST_U3_PHYD);
  820. }
  821. static void sata_phy_instance_init(struct mtk_tphy *tphy,
  822. struct mtk_phy_instance *instance)
  823. {
  824. struct u3phy_banks *u3_banks = &instance->u3_banks;
  825. void __iomem *phyd = u3_banks->phyd;
  826. /* charge current adjustment */
  827. mtk_phy_update_bits(phyd + ANA_RG_CTRL_SIGNAL6,
  828. RG_CDR_BIRLTR_GEN1_MSK | RG_CDR_BC_GEN1_MSK,
  829. FIELD_PREP(RG_CDR_BIRLTR_GEN1_MSK, 0x6) |
  830. FIELD_PREP(RG_CDR_BC_GEN1_MSK, 0x1a));
  831. mtk_phy_update_field(phyd + ANA_EQ_EYE_CTRL_SIGNAL4, RG_CDR_BIRLTD0_GEN1_MSK, 0x18);
  832. mtk_phy_update_field(phyd + ANA_EQ_EYE_CTRL_SIGNAL5, RG_CDR_BIRLTD0_GEN3_MSK, 0x06);
  833. mtk_phy_update_bits(phyd + ANA_RG_CTRL_SIGNAL4,
  834. RG_CDR_BICLTR_GEN1_MSK | RG_CDR_BR_GEN2_MSK,
  835. FIELD_PREP(RG_CDR_BICLTR_GEN1_MSK, 0x0c) |
  836. FIELD_PREP(RG_CDR_BR_GEN2_MSK, 0x07));
  837. mtk_phy_update_bits(phyd + PHYD_CTRL_SIGNAL_MODE4,
  838. RG_CDR_BICLTD0_GEN1_MSK | RG_CDR_BICLTD1_GEN1_MSK,
  839. FIELD_PREP(RG_CDR_BICLTD0_GEN1_MSK, 0x08) |
  840. FIELD_PREP(RG_CDR_BICLTD1_GEN1_MSK, 0x02));
  841. mtk_phy_update_field(phyd + PHYD_DESIGN_OPTION2, RG_LOCK_CNT_SEL_MSK, 0x02);
  842. mtk_phy_update_bits(phyd + PHYD_DESIGN_OPTION9,
  843. RG_T2_MIN_MSK | RG_TG_MIN_MSK,
  844. FIELD_PREP(RG_T2_MIN_MSK, 0x12) |
  845. FIELD_PREP(RG_TG_MIN_MSK, 0x04));
  846. mtk_phy_update_bits(phyd + PHYD_DESIGN_OPTION9,
  847. RG_T2_MAX_MSK | RG_TG_MAX_MSK,
  848. FIELD_PREP(RG_T2_MAX_MSK, 0x31) |
  849. FIELD_PREP(RG_TG_MAX_MSK, 0x0e));
  850. mtk_phy_update_field(phyd + ANA_RG_CTRL_SIGNAL1, RG_IDRV_0DB_GEN1_MSK, 0x20);
  851. mtk_phy_update_field(phyd + ANA_EQ_EYE_CTRL_SIGNAL1, RG_EQ_DLEQ_LFI_GEN1_MSK, 0x03);
  852. dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
  853. }
  854. static void phy_v1_banks_init(struct mtk_tphy *tphy,
  855. struct mtk_phy_instance *instance)
  856. {
  857. struct u2phy_banks *u2_banks = &instance->u2_banks;
  858. struct u3phy_banks *u3_banks = &instance->u3_banks;
  859. switch (instance->type) {
  860. case PHY_TYPE_USB2:
  861. u2_banks->misc = NULL;
  862. u2_banks->fmreg = tphy->sif_base + SSUSB_SIFSLV_V1_U2FREQ;
  863. u2_banks->com = instance->port_base + SSUSB_SIFSLV_V1_U2PHY_COM;
  864. break;
  865. case PHY_TYPE_USB3:
  866. case PHY_TYPE_PCIE:
  867. u3_banks->spllc = tphy->sif_base + SSUSB_SIFSLV_V1_SPLLC;
  868. u3_banks->chip = tphy->sif_base + SSUSB_SIFSLV_V1_CHIP;
  869. u3_banks->phyd = instance->port_base + SSUSB_SIFSLV_V1_U3PHYD;
  870. u3_banks->phya = instance->port_base + SSUSB_SIFSLV_V1_U3PHYA;
  871. break;
  872. case PHY_TYPE_SATA:
  873. u3_banks->phyd = instance->port_base + SSUSB_SIFSLV_V1_U3PHYD;
  874. break;
  875. default:
  876. dev_err(tphy->dev, "incompatible PHY type\n");
  877. return;
  878. }
  879. }
  880. static void phy_v2_banks_init(struct mtk_tphy *tphy,
  881. struct mtk_phy_instance *instance)
  882. {
  883. struct u2phy_banks *u2_banks = &instance->u2_banks;
  884. struct u3phy_banks *u3_banks = &instance->u3_banks;
  885. switch (instance->type) {
  886. case PHY_TYPE_USB2:
  887. u2_banks->misc = instance->port_base + SSUSB_SIFSLV_V2_MISC;
  888. u2_banks->fmreg = instance->port_base + SSUSB_SIFSLV_V2_U2FREQ;
  889. u2_banks->com = instance->port_base + SSUSB_SIFSLV_V2_U2PHY_COM;
  890. break;
  891. case PHY_TYPE_USB3:
  892. case PHY_TYPE_PCIE:
  893. u3_banks->spllc = instance->port_base + SSUSB_SIFSLV_V2_SPLLC;
  894. u3_banks->chip = instance->port_base + SSUSB_SIFSLV_V2_CHIP;
  895. u3_banks->phyd = instance->port_base + SSUSB_SIFSLV_V2_U3PHYD;
  896. u3_banks->phya = instance->port_base + SSUSB_SIFSLV_V2_U3PHYA;
  897. break;
  898. default:
  899. dev_err(tphy->dev, "incompatible PHY type\n");
  900. return;
  901. }
  902. }
  903. static void phy_parse_property(struct mtk_tphy *tphy,
  904. struct mtk_phy_instance *instance)
  905. {
  906. struct device *dev = &instance->phy->dev;
  907. if (instance->type == PHY_TYPE_USB3)
  908. instance->type_force_mode = device_property_read_bool(dev, "mediatek,force-mode");
  909. if (instance->type != PHY_TYPE_USB2)
  910. return;
  911. instance->bc12_en = device_property_read_bool(dev, "mediatek,bc12");
  912. device_property_read_u32(dev, "mediatek,eye-src",
  913. &instance->eye_src);
  914. device_property_read_u32(dev, "mediatek,eye-vrt",
  915. &instance->eye_vrt);
  916. device_property_read_u32(dev, "mediatek,eye-term",
  917. &instance->eye_term);
  918. device_property_read_u32(dev, "mediatek,intr",
  919. &instance->intr);
  920. device_property_read_u32(dev, "mediatek,discth",
  921. &instance->discth);
  922. device_property_read_u32(dev, "mediatek,pre-emphasis",
  923. &instance->pre_emphasis);
  924. dev_dbg(dev, "bc12:%d, src:%d, vrt:%d, term:%d, intr:%d, disc:%d\n",
  925. instance->bc12_en, instance->eye_src,
  926. instance->eye_vrt, instance->eye_term,
  927. instance->intr, instance->discth);
  928. dev_dbg(dev, "pre-emp:%d\n", instance->pre_emphasis);
  929. }
  930. static void u2_phy_props_set(struct mtk_tphy *tphy,
  931. struct mtk_phy_instance *instance)
  932. {
  933. struct u2phy_banks *u2_banks = &instance->u2_banks;
  934. void __iomem *com = u2_banks->com;
  935. if (instance->bc12_en) /* BC1.2 path Enable */
  936. mtk_phy_set_bits(com + U3P_U2PHYBC12C, P2C_RG_CHGDT_EN);
  937. if (tphy->pdata->version < MTK_PHY_V3 && instance->eye_src)
  938. mtk_phy_update_field(com + U3P_USBPHYACR5, PA5_RG_U2_HSTX_SRCTRL,
  939. instance->eye_src);
  940. if (instance->eye_vrt)
  941. mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_VRT_SEL,
  942. instance->eye_vrt);
  943. if (instance->eye_term)
  944. mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_TERM_SEL,
  945. instance->eye_term);
  946. if (instance->intr) {
  947. if (u2_banks->misc)
  948. mtk_phy_set_bits(u2_banks->misc + U3P_MISC_REG1,
  949. MR1_EFUSE_AUTO_LOAD_DIS);
  950. mtk_phy_update_field(com + U3P_USBPHYACR1, PA1_RG_INTR_CAL,
  951. instance->intr);
  952. }
  953. if (instance->discth)
  954. mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_DISCTH,
  955. instance->discth);
  956. if (instance->pre_emphasis)
  957. mtk_phy_update_field(com + U3P_USBPHYACR6, PA6_RG_U2_PRE_EMP,
  958. instance->pre_emphasis);
  959. }
  960. /* type switch for usb3/pcie/sgmii/sata */
  961. static int phy_type_syscon_get(struct mtk_phy_instance *instance,
  962. struct device_node *dn)
  963. {
  964. struct of_phandle_args args;
  965. int ret;
  966. /* type switch function is optional */
  967. if (!of_property_present(dn, "mediatek,syscon-type"))
  968. return 0;
  969. ret = of_parse_phandle_with_fixed_args(dn, "mediatek,syscon-type",
  970. 2, 0, &args);
  971. if (ret)
  972. return ret;
  973. instance->type_sw_reg = args.args[0];
  974. instance->type_sw_index = args.args[1] & 0x3; /* <=3 */
  975. instance->type_sw = syscon_node_to_regmap(args.np);
  976. of_node_put(args.np);
  977. dev_info(&instance->phy->dev, "type_sw - reg %#x, index %d\n",
  978. instance->type_sw_reg, instance->type_sw_index);
  979. return PTR_ERR_OR_ZERO(instance->type_sw);
  980. }
  981. static int phy_type_set(struct mtk_phy_instance *instance)
  982. {
  983. int type;
  984. u32 offset;
  985. if (!instance->type_sw)
  986. return 0;
  987. switch (instance->type) {
  988. case PHY_TYPE_USB3:
  989. type = RG_PHY_SW_USB3;
  990. break;
  991. case PHY_TYPE_PCIE:
  992. type = RG_PHY_SW_PCIE;
  993. break;
  994. case PHY_TYPE_SGMII:
  995. type = RG_PHY_SW_SGMII;
  996. break;
  997. case PHY_TYPE_SATA:
  998. type = RG_PHY_SW_SATA;
  999. break;
  1000. case PHY_TYPE_USB2:
  1001. default:
  1002. return 0;
  1003. }
  1004. offset = instance->type_sw_index * BITS_PER_BYTE;
  1005. regmap_update_bits(instance->type_sw, instance->type_sw_reg,
  1006. RG_PHY_SW_TYPE << offset, type << offset);
  1007. return 0;
  1008. }
  1009. static int phy_efuse_get(struct mtk_tphy *tphy, struct mtk_phy_instance *instance)
  1010. {
  1011. struct device *dev = &instance->phy->dev;
  1012. int ret = 0;
  1013. /* tphy v1 doesn't support sw efuse, skip it */
  1014. if (!tphy->pdata->sw_efuse_supported) {
  1015. instance->efuse_sw_en = 0;
  1016. return 0;
  1017. }
  1018. /* software efuse is optional */
  1019. instance->efuse_sw_en = device_property_present(dev, "nvmem-cells");
  1020. if (!instance->efuse_sw_en)
  1021. return 0;
  1022. switch (instance->type) {
  1023. case PHY_TYPE_USB2:
  1024. ret = nvmem_cell_read_variable_le_u32(dev, "intr", &instance->efuse_intr);
  1025. if (ret) {
  1026. dev_err(dev, "fail to get u2 intr efuse, %d\n", ret);
  1027. break;
  1028. }
  1029. /* no efuse, ignore it */
  1030. if (!instance->efuse_intr) {
  1031. dev_warn(dev, "no u2 intr efuse, but dts enable it\n");
  1032. instance->efuse_sw_en = 0;
  1033. break;
  1034. }
  1035. dev_dbg(dev, "u2 efuse - intr %x\n", instance->efuse_intr);
  1036. break;
  1037. case PHY_TYPE_USB3:
  1038. case PHY_TYPE_PCIE:
  1039. ret = nvmem_cell_read_variable_le_u32(dev, "intr", &instance->efuse_intr);
  1040. if (ret) {
  1041. dev_err(dev, "fail to get u3 intr efuse, %d\n", ret);
  1042. break;
  1043. }
  1044. ret = nvmem_cell_read_variable_le_u32(dev, "rx_imp", &instance->efuse_rx_imp);
  1045. if (ret) {
  1046. dev_err(dev, "fail to get u3 rx_imp efuse, %d\n", ret);
  1047. break;
  1048. }
  1049. ret = nvmem_cell_read_variable_le_u32(dev, "tx_imp", &instance->efuse_tx_imp);
  1050. if (ret) {
  1051. dev_err(dev, "fail to get u3 tx_imp efuse, %d\n", ret);
  1052. break;
  1053. }
  1054. /* no efuse, ignore it */
  1055. if (!instance->efuse_intr &&
  1056. !instance->efuse_rx_imp &&
  1057. !instance->efuse_tx_imp) {
  1058. dev_warn(dev, "no u3 intr efuse, but dts enable it\n");
  1059. instance->efuse_sw_en = 0;
  1060. break;
  1061. }
  1062. dev_dbg(dev, "u3 efuse - intr %x, rx_imp %x, tx_imp %x\n",
  1063. instance->efuse_intr, instance->efuse_rx_imp,instance->efuse_tx_imp);
  1064. break;
  1065. default:
  1066. dev_err(dev, "no sw efuse for type %d\n", instance->type);
  1067. ret = -EINVAL;
  1068. }
  1069. return ret;
  1070. }
  1071. static void phy_efuse_set(struct mtk_phy_instance *instance)
  1072. {
  1073. struct device *dev = &instance->phy->dev;
  1074. struct u2phy_banks *u2_banks = &instance->u2_banks;
  1075. struct u3phy_banks *u3_banks = &instance->u3_banks;
  1076. if (!instance->efuse_sw_en)
  1077. return;
  1078. switch (instance->type) {
  1079. case PHY_TYPE_USB2:
  1080. mtk_phy_set_bits(u2_banks->misc + U3P_MISC_REG1, MR1_EFUSE_AUTO_LOAD_DIS);
  1081. mtk_phy_update_field(u2_banks->com + U3P_USBPHYACR1, PA1_RG_INTR_CAL,
  1082. instance->efuse_intr);
  1083. break;
  1084. case PHY_TYPE_USB3:
  1085. case PHY_TYPE_PCIE:
  1086. mtk_phy_set_bits(u3_banks->phyd + U3P_U3_PHYD_RSV, P3D_RG_EFUSE_AUTO_LOAD_DIS);
  1087. mtk_phy_update_field(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0, P3D_RG_TX_IMPEL,
  1088. instance->efuse_tx_imp);
  1089. mtk_phy_set_bits(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0, P3D_RG_FORCE_TX_IMPEL);
  1090. mtk_phy_update_field(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1, P3D_RG_RX_IMPEL,
  1091. instance->efuse_rx_imp);
  1092. mtk_phy_set_bits(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1, P3D_RG_FORCE_RX_IMPEL);
  1093. mtk_phy_update_field(u3_banks->phya + U3P_U3_PHYA_REG0, P3A_RG_IEXT_INTR,
  1094. instance->efuse_intr);
  1095. break;
  1096. default:
  1097. dev_warn(dev, "no sw efuse for type %d\n", instance->type);
  1098. break;
  1099. }
  1100. }
  1101. static int mtk_phy_init(struct phy *phy)
  1102. {
  1103. struct mtk_phy_instance *instance = phy_get_drvdata(phy);
  1104. struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
  1105. int ret;
  1106. ret = clk_bulk_prepare_enable(TPHY_CLKS_CNT, instance->clks);
  1107. if (ret)
  1108. return ret;
  1109. phy_efuse_set(instance);
  1110. switch (instance->type) {
  1111. case PHY_TYPE_USB2:
  1112. u2_phy_instance_init(tphy, instance);
  1113. u2_phy_props_set(tphy, instance);
  1114. break;
  1115. case PHY_TYPE_USB3:
  1116. u3_phy_instance_init(tphy, instance);
  1117. break;
  1118. case PHY_TYPE_PCIE:
  1119. pcie_phy_instance_init(tphy, instance);
  1120. break;
  1121. case PHY_TYPE_SATA:
  1122. sata_phy_instance_init(tphy, instance);
  1123. break;
  1124. case PHY_TYPE_SGMII:
  1125. /* nothing to do, only used to set type */
  1126. break;
  1127. default:
  1128. dev_err(tphy->dev, "incompatible PHY type\n");
  1129. clk_bulk_disable_unprepare(TPHY_CLKS_CNT, instance->clks);
  1130. return -EINVAL;
  1131. }
  1132. return 0;
  1133. }
  1134. static int mtk_phy_power_on(struct phy *phy)
  1135. {
  1136. struct mtk_phy_instance *instance = phy_get_drvdata(phy);
  1137. struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
  1138. if (instance->type == PHY_TYPE_USB2) {
  1139. u2_phy_instance_power_on(tphy, instance);
  1140. hs_slew_rate_calibrate(tphy, instance);
  1141. } else if (instance->type == PHY_TYPE_PCIE) {
  1142. pcie_phy_instance_power_on(tphy, instance);
  1143. }
  1144. return 0;
  1145. }
  1146. static int mtk_phy_power_off(struct phy *phy)
  1147. {
  1148. struct mtk_phy_instance *instance = phy_get_drvdata(phy);
  1149. struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
  1150. if (instance->type == PHY_TYPE_USB2)
  1151. u2_phy_instance_power_off(tphy, instance);
  1152. else if (instance->type == PHY_TYPE_PCIE)
  1153. pcie_phy_instance_power_off(tphy, instance);
  1154. return 0;
  1155. }
  1156. static int mtk_phy_exit(struct phy *phy)
  1157. {
  1158. struct mtk_phy_instance *instance = phy_get_drvdata(phy);
  1159. struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
  1160. if (instance->type == PHY_TYPE_USB2)
  1161. u2_phy_instance_exit(tphy, instance);
  1162. clk_bulk_disable_unprepare(TPHY_CLKS_CNT, instance->clks);
  1163. return 0;
  1164. }
  1165. static int mtk_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
  1166. {
  1167. struct mtk_phy_instance *instance = phy_get_drvdata(phy);
  1168. struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
  1169. if (instance->type == PHY_TYPE_USB2)
  1170. u2_phy_instance_set_mode(tphy, instance, mode);
  1171. return 0;
  1172. }
  1173. static struct phy *mtk_phy_xlate(struct device *dev,
  1174. const struct of_phandle_args *args)
  1175. {
  1176. struct mtk_tphy *tphy = dev_get_drvdata(dev);
  1177. struct mtk_phy_instance *instance = NULL;
  1178. struct device_node *phy_np = args->np;
  1179. int index;
  1180. int ret;
  1181. if (args->args_count != 1) {
  1182. dev_err(dev, "invalid number of cells in 'phy' property\n");
  1183. return ERR_PTR(-EINVAL);
  1184. }
  1185. for (index = 0; index < tphy->nphys; index++)
  1186. if (phy_np == tphy->phys[index]->phy->dev.of_node) {
  1187. instance = tphy->phys[index];
  1188. break;
  1189. }
  1190. if (!instance) {
  1191. dev_err(dev, "failed to find appropriate phy\n");
  1192. return ERR_PTR(-EINVAL);
  1193. }
  1194. instance->type = args->args[0];
  1195. if (!(instance->type == PHY_TYPE_USB2 ||
  1196. instance->type == PHY_TYPE_USB3 ||
  1197. instance->type == PHY_TYPE_PCIE ||
  1198. instance->type == PHY_TYPE_SATA ||
  1199. instance->type == PHY_TYPE_SGMII)) {
  1200. dev_err(dev, "unsupported device type: %d\n", instance->type);
  1201. return ERR_PTR(-EINVAL);
  1202. }
  1203. switch (tphy->pdata->version) {
  1204. case MTK_PHY_V1:
  1205. phy_v1_banks_init(tphy, instance);
  1206. break;
  1207. case MTK_PHY_V2:
  1208. case MTK_PHY_V3:
  1209. phy_v2_banks_init(tphy, instance);
  1210. break;
  1211. default:
  1212. dev_err(dev, "phy version is not supported\n");
  1213. return ERR_PTR(-EINVAL);
  1214. }
  1215. ret = phy_efuse_get(tphy, instance);
  1216. if (ret)
  1217. return ERR_PTR(ret);
  1218. phy_parse_property(tphy, instance);
  1219. phy_type_set(instance);
  1220. phy_debugfs_init(instance);
  1221. return instance->phy;
  1222. }
  1223. static const struct phy_ops mtk_tphy_ops = {
  1224. .init = mtk_phy_init,
  1225. .exit = mtk_phy_exit,
  1226. .power_on = mtk_phy_power_on,
  1227. .power_off = mtk_phy_power_off,
  1228. .set_mode = mtk_phy_set_mode,
  1229. .owner = THIS_MODULE,
  1230. };
  1231. static const struct mtk_phy_pdata tphy_v1_pdata = {
  1232. .avoid_rx_sen_degradation = false,
  1233. .slew_ref_clock_mhz = 26,
  1234. .slew_rate_coefficient = 28,
  1235. .version = MTK_PHY_V1,
  1236. };
  1237. static const struct mtk_phy_pdata tphy_v2_pdata = {
  1238. .avoid_rx_sen_degradation = false,
  1239. .sw_efuse_supported = true,
  1240. .slew_ref_clock_mhz = 26,
  1241. .slew_rate_coefficient = 28,
  1242. .version = MTK_PHY_V2,
  1243. };
  1244. static const struct mtk_phy_pdata tphy_v3_pdata = {
  1245. .sw_efuse_supported = true,
  1246. .version = MTK_PHY_V3,
  1247. };
  1248. static const struct mtk_phy_pdata mt8173_pdata = {
  1249. .avoid_rx_sen_degradation = true,
  1250. .slew_ref_clock_mhz = 26,
  1251. .slew_rate_coefficient = 28,
  1252. .version = MTK_PHY_V1,
  1253. };
  1254. static const struct mtk_phy_pdata mt8195_pdata = {
  1255. .sw_pll_48m_to_26m = true,
  1256. .sw_efuse_supported = true,
  1257. .version = MTK_PHY_V3,
  1258. };
  1259. static const struct of_device_id mtk_tphy_id_table[] = {
  1260. { .compatible = "mediatek,mt2701-u3phy", .data = &tphy_v1_pdata },
  1261. { .compatible = "mediatek,mt2712-u3phy", .data = &tphy_v2_pdata },
  1262. { .compatible = "mediatek,mt8173-u3phy", .data = &mt8173_pdata },
  1263. { .compatible = "mediatek,mt8195-tphy", .data = &mt8195_pdata },
  1264. { .compatible = "mediatek,generic-tphy-v1", .data = &tphy_v1_pdata },
  1265. { .compatible = "mediatek,generic-tphy-v2", .data = &tphy_v2_pdata },
  1266. { .compatible = "mediatek,generic-tphy-v3", .data = &tphy_v3_pdata },
  1267. { },
  1268. };
  1269. MODULE_DEVICE_TABLE(of, mtk_tphy_id_table);
  1270. static int mtk_tphy_probe(struct platform_device *pdev)
  1271. {
  1272. struct device *dev = &pdev->dev;
  1273. struct device_node *np = dev->of_node;
  1274. struct phy_provider *provider;
  1275. struct resource *sif_res;
  1276. struct mtk_tphy *tphy;
  1277. struct resource res;
  1278. int port, ret;
  1279. tphy = devm_kzalloc(dev, sizeof(*tphy), GFP_KERNEL);
  1280. if (!tphy)
  1281. return -ENOMEM;
  1282. tphy->pdata = of_device_get_match_data(dev);
  1283. if (!tphy->pdata)
  1284. return -EINVAL;
  1285. tphy->nphys = of_get_child_count(np);
  1286. tphy->phys = devm_kcalloc(dev, tphy->nphys,
  1287. sizeof(*tphy->phys), GFP_KERNEL);
  1288. if (!tphy->phys)
  1289. return -ENOMEM;
  1290. tphy->dev = dev;
  1291. platform_set_drvdata(pdev, tphy);
  1292. sif_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1293. /* SATA phy of V1 needn't it if not shared with PCIe or USB */
  1294. if (sif_res && tphy->pdata->version == MTK_PHY_V1) {
  1295. /* get banks shared by multiple phys */
  1296. tphy->sif_base = devm_ioremap_resource(dev, sif_res);
  1297. if (IS_ERR(tphy->sif_base)) {
  1298. dev_err(dev, "failed to remap sif regs\n");
  1299. return PTR_ERR(tphy->sif_base);
  1300. }
  1301. }
  1302. /* Optional properties for slew calibration variation */
  1303. ret = device_property_read_u32(dev, "mediatek,src-ref-clk-mhz", &tphy->src_ref_clk);
  1304. if (ret)
  1305. tphy->src_ref_clk = tphy->pdata->slew_ref_clock_mhz;
  1306. ret = device_property_read_u32(dev, "mediatek,src-coef", &tphy->src_coef);
  1307. if (ret)
  1308. tphy->src_coef = tphy->pdata->slew_rate_coefficient;
  1309. port = 0;
  1310. for_each_child_of_node_scoped(np, child_np) {
  1311. struct mtk_phy_instance *instance;
  1312. struct clk_bulk_data *clks;
  1313. struct device *subdev;
  1314. struct phy *phy;
  1315. int retval;
  1316. instance = devm_kzalloc(dev, sizeof(*instance), GFP_KERNEL);
  1317. if (!instance)
  1318. return -ENOMEM;
  1319. tphy->phys[port] = instance;
  1320. phy = devm_phy_create(dev, child_np, &mtk_tphy_ops);
  1321. if (IS_ERR(phy)) {
  1322. dev_err(dev, "failed to create phy\n");
  1323. return PTR_ERR(phy);
  1324. }
  1325. subdev = &phy->dev;
  1326. retval = of_address_to_resource(child_np, 0, &res);
  1327. if (retval) {
  1328. dev_err(subdev, "failed to get address resource(id-%d)\n",
  1329. port);
  1330. return retval;
  1331. }
  1332. instance->port_base = devm_ioremap_resource(subdev, &res);
  1333. if (IS_ERR(instance->port_base))
  1334. return PTR_ERR(instance->port_base);
  1335. instance->phy = phy;
  1336. instance->index = port;
  1337. phy_set_drvdata(phy, instance);
  1338. port++;
  1339. clks = instance->clks;
  1340. clks[0].id = "ref"; /* digital (& analog) clock */
  1341. clks[1].id = "da_ref"; /* analog clock */
  1342. retval = devm_clk_bulk_get_optional(subdev, TPHY_CLKS_CNT, clks);
  1343. if (retval)
  1344. return retval;
  1345. retval = phy_type_syscon_get(instance, child_np);
  1346. if (retval)
  1347. return retval;
  1348. }
  1349. provider = devm_of_phy_provider_register(dev, mtk_phy_xlate);
  1350. return PTR_ERR_OR_ZERO(provider);
  1351. }
  1352. static struct platform_driver mtk_tphy_driver = {
  1353. .probe = mtk_tphy_probe,
  1354. .driver = {
  1355. .name = "mtk-tphy",
  1356. .of_match_table = mtk_tphy_id_table,
  1357. },
  1358. };
  1359. module_platform_driver(mtk_tphy_driver);
  1360. MODULE_AUTHOR("Chunfeng Yun <chunfeng.yun@mediatek.com>");
  1361. MODULE_DESCRIPTION("MediaTek T-PHY driver");
  1362. MODULE_LICENSE("GPL v2");