xusb.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2014-2022, NVIDIA CORPORATION. All rights reserved.
  4. * Copyright (c) 2015, Google Inc.
  5. */
  6. #ifndef __PHY_TEGRA_XUSB_H
  7. #define __PHY_TEGRA_XUSB_H
  8. #include <linux/io.h>
  9. #include <linux/mutex.h>
  10. #include <linux/workqueue.h>
  11. #include <linux/usb/ch9.h>
  12. #include <linux/usb/otg.h>
  13. #include <linux/usb/role.h>
  14. /* legacy entry points for backwards-compatibility */
  15. int tegra_xusb_padctl_legacy_probe(struct platform_device *pdev);
  16. int tegra_xusb_padctl_legacy_remove(struct platform_device *pdev);
  17. struct phy;
  18. struct phy_provider;
  19. struct platform_device;
  20. struct regulator;
  21. /*
  22. * lanes
  23. */
  24. struct tegra_xusb_lane_soc {
  25. const char *name;
  26. unsigned int offset;
  27. unsigned int shift;
  28. unsigned int mask;
  29. const char * const *funcs;
  30. unsigned int num_funcs;
  31. struct {
  32. unsigned int misc_ctl2;
  33. } regs;
  34. };
  35. struct tegra_xusb_lane {
  36. const struct tegra_xusb_lane_soc *soc;
  37. struct tegra_xusb_pad *pad;
  38. struct device_node *np;
  39. struct list_head list;
  40. unsigned int function;
  41. unsigned int index;
  42. };
  43. int tegra_xusb_lane_parse_dt(struct tegra_xusb_lane *lane,
  44. struct device_node *np);
  45. struct tegra_xusb_usb3_lane {
  46. struct tegra_xusb_lane base;
  47. };
  48. static inline struct tegra_xusb_usb3_lane *
  49. to_usb3_lane(struct tegra_xusb_lane *lane)
  50. {
  51. return container_of(lane, struct tegra_xusb_usb3_lane, base);
  52. }
  53. struct tegra_xusb_usb2_lane {
  54. struct tegra_xusb_lane base;
  55. u32 hs_curr_level_offset;
  56. bool powered_on;
  57. };
  58. static inline struct tegra_xusb_usb2_lane *
  59. to_usb2_lane(struct tegra_xusb_lane *lane)
  60. {
  61. return container_of(lane, struct tegra_xusb_usb2_lane, base);
  62. }
  63. struct tegra_xusb_ulpi_lane {
  64. struct tegra_xusb_lane base;
  65. };
  66. static inline struct tegra_xusb_ulpi_lane *
  67. to_ulpi_lane(struct tegra_xusb_lane *lane)
  68. {
  69. return container_of(lane, struct tegra_xusb_ulpi_lane, base);
  70. }
  71. struct tegra_xusb_hsic_lane {
  72. struct tegra_xusb_lane base;
  73. u32 strobe_trim;
  74. u32 rx_strobe_trim;
  75. u32 rx_data_trim;
  76. u32 tx_rtune_n;
  77. u32 tx_rtune_p;
  78. u32 tx_rslew_n;
  79. u32 tx_rslew_p;
  80. bool auto_term;
  81. };
  82. static inline struct tegra_xusb_hsic_lane *
  83. to_hsic_lane(struct tegra_xusb_lane *lane)
  84. {
  85. return container_of(lane, struct tegra_xusb_hsic_lane, base);
  86. }
  87. struct tegra_xusb_pcie_lane {
  88. struct tegra_xusb_lane base;
  89. };
  90. static inline struct tegra_xusb_pcie_lane *
  91. to_pcie_lane(struct tegra_xusb_lane *lane)
  92. {
  93. return container_of(lane, struct tegra_xusb_pcie_lane, base);
  94. }
  95. struct tegra_xusb_sata_lane {
  96. struct tegra_xusb_lane base;
  97. };
  98. static inline struct tegra_xusb_sata_lane *
  99. to_sata_lane(struct tegra_xusb_lane *lane)
  100. {
  101. return container_of(lane, struct tegra_xusb_sata_lane, base);
  102. }
  103. struct tegra_xusb_lane_ops {
  104. struct tegra_xusb_lane *(*probe)(struct tegra_xusb_pad *pad,
  105. struct device_node *np,
  106. unsigned int index);
  107. void (*remove)(struct tegra_xusb_lane *lane);
  108. void (*iddq_enable)(struct tegra_xusb_lane *lane);
  109. void (*iddq_disable)(struct tegra_xusb_lane *lane);
  110. int (*enable_phy_sleepwalk)(struct tegra_xusb_lane *lane, enum usb_device_speed speed);
  111. int (*disable_phy_sleepwalk)(struct tegra_xusb_lane *lane);
  112. int (*enable_phy_wake)(struct tegra_xusb_lane *lane);
  113. int (*disable_phy_wake)(struct tegra_xusb_lane *lane);
  114. bool (*remote_wake_detected)(struct tegra_xusb_lane *lane);
  115. };
  116. bool tegra_xusb_lane_check(struct tegra_xusb_lane *lane, const char *function);
  117. /*
  118. * pads
  119. */
  120. struct tegra_xusb_pad_soc;
  121. struct tegra_xusb_padctl;
  122. struct tegra_xusb_pad_ops {
  123. struct tegra_xusb_pad *(*probe)(struct tegra_xusb_padctl *padctl,
  124. const struct tegra_xusb_pad_soc *soc,
  125. struct device_node *np);
  126. void (*remove)(struct tegra_xusb_pad *pad);
  127. };
  128. struct tegra_xusb_pad_soc {
  129. const char *name;
  130. const struct tegra_xusb_lane_soc *lanes;
  131. unsigned int num_lanes;
  132. const struct tegra_xusb_pad_ops *ops;
  133. };
  134. struct tegra_xusb_pad {
  135. const struct tegra_xusb_pad_soc *soc;
  136. struct tegra_xusb_padctl *padctl;
  137. struct phy_provider *provider;
  138. struct phy **lanes;
  139. struct device dev;
  140. const struct tegra_xusb_lane_ops *ops;
  141. struct list_head list;
  142. };
  143. static inline struct tegra_xusb_pad *to_tegra_xusb_pad(struct device *dev)
  144. {
  145. return container_of(dev, struct tegra_xusb_pad, dev);
  146. }
  147. int tegra_xusb_pad_init(struct tegra_xusb_pad *pad,
  148. struct tegra_xusb_padctl *padctl,
  149. struct device_node *np);
  150. int tegra_xusb_pad_register(struct tegra_xusb_pad *pad,
  151. const struct phy_ops *ops);
  152. void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad);
  153. struct tegra_xusb_usb3_pad {
  154. struct tegra_xusb_pad base;
  155. unsigned int enable;
  156. struct mutex lock;
  157. };
  158. static inline struct tegra_xusb_usb3_pad *
  159. to_usb3_pad(struct tegra_xusb_pad *pad)
  160. {
  161. return container_of(pad, struct tegra_xusb_usb3_pad, base);
  162. }
  163. struct tegra_xusb_usb2_pad {
  164. struct tegra_xusb_pad base;
  165. struct clk *clk;
  166. unsigned int enable;
  167. struct mutex lock;
  168. };
  169. static inline struct tegra_xusb_usb2_pad *
  170. to_usb2_pad(struct tegra_xusb_pad *pad)
  171. {
  172. return container_of(pad, struct tegra_xusb_usb2_pad, base);
  173. }
  174. struct tegra_xusb_ulpi_pad {
  175. struct tegra_xusb_pad base;
  176. };
  177. static inline struct tegra_xusb_ulpi_pad *
  178. to_ulpi_pad(struct tegra_xusb_pad *pad)
  179. {
  180. return container_of(pad, struct tegra_xusb_ulpi_pad, base);
  181. }
  182. struct tegra_xusb_hsic_pad {
  183. struct tegra_xusb_pad base;
  184. struct regulator *supply;
  185. struct clk *clk;
  186. };
  187. static inline struct tegra_xusb_hsic_pad *
  188. to_hsic_pad(struct tegra_xusb_pad *pad)
  189. {
  190. return container_of(pad, struct tegra_xusb_hsic_pad, base);
  191. }
  192. struct tegra_xusb_pcie_pad {
  193. struct tegra_xusb_pad base;
  194. struct reset_control *rst;
  195. struct clk *pll;
  196. bool enable;
  197. };
  198. static inline struct tegra_xusb_pcie_pad *
  199. to_pcie_pad(struct tegra_xusb_pad *pad)
  200. {
  201. return container_of(pad, struct tegra_xusb_pcie_pad, base);
  202. }
  203. struct tegra_xusb_sata_pad {
  204. struct tegra_xusb_pad base;
  205. struct reset_control *rst;
  206. struct clk *pll;
  207. bool enable;
  208. };
  209. static inline struct tegra_xusb_sata_pad *
  210. to_sata_pad(struct tegra_xusb_pad *pad)
  211. {
  212. return container_of(pad, struct tegra_xusb_sata_pad, base);
  213. }
  214. /*
  215. * ports
  216. */
  217. struct tegra_xusb_port_ops;
  218. struct tegra_xusb_port {
  219. struct tegra_xusb_padctl *padctl;
  220. struct tegra_xusb_lane *lane;
  221. unsigned int index;
  222. struct list_head list;
  223. struct device dev;
  224. struct usb_role_switch *usb_role_sw;
  225. struct work_struct usb_phy_work;
  226. struct usb_phy usb_phy;
  227. const struct tegra_xusb_port_ops *ops;
  228. };
  229. static inline struct tegra_xusb_port *to_tegra_xusb_port(struct device *dev)
  230. {
  231. return container_of(dev, struct tegra_xusb_port, dev);
  232. }
  233. struct tegra_xusb_lane_map {
  234. unsigned int port;
  235. const char *type;
  236. unsigned int index;
  237. const char *func;
  238. };
  239. struct tegra_xusb_lane *
  240. tegra_xusb_port_find_lane(struct tegra_xusb_port *port,
  241. const struct tegra_xusb_lane_map *map,
  242. const char *function);
  243. struct tegra_xusb_port *
  244. tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type,
  245. unsigned int index);
  246. struct tegra_xusb_usb2_port {
  247. struct tegra_xusb_port base;
  248. struct regulator *supply;
  249. enum usb_dr_mode mode;
  250. bool internal;
  251. int usb3_port_fake;
  252. };
  253. static inline struct tegra_xusb_usb2_port *
  254. to_usb2_port(struct tegra_xusb_port *port)
  255. {
  256. return container_of(port, struct tegra_xusb_usb2_port, base);
  257. }
  258. struct tegra_xusb_usb2_port *
  259. tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl,
  260. unsigned int index);
  261. void tegra_xusb_usb2_port_release(struct tegra_xusb_port *port);
  262. void tegra_xusb_usb2_port_remove(struct tegra_xusb_port *port);
  263. struct tegra_xusb_ulpi_port {
  264. struct tegra_xusb_port base;
  265. struct regulator *supply;
  266. bool internal;
  267. };
  268. static inline struct tegra_xusb_ulpi_port *
  269. to_ulpi_port(struct tegra_xusb_port *port)
  270. {
  271. return container_of(port, struct tegra_xusb_ulpi_port, base);
  272. }
  273. void tegra_xusb_ulpi_port_release(struct tegra_xusb_port *port);
  274. struct tegra_xusb_hsic_port {
  275. struct tegra_xusb_port base;
  276. };
  277. static inline struct tegra_xusb_hsic_port *
  278. to_hsic_port(struct tegra_xusb_port *port)
  279. {
  280. return container_of(port, struct tegra_xusb_hsic_port, base);
  281. }
  282. void tegra_xusb_hsic_port_release(struct tegra_xusb_port *port);
  283. struct tegra_xusb_usb3_port {
  284. struct tegra_xusb_port base;
  285. struct regulator *supply;
  286. bool context_saved;
  287. unsigned int port;
  288. bool internal;
  289. bool disable_gen2;
  290. u32 tap1;
  291. u32 amp;
  292. u32 ctle_z;
  293. u32 ctle_g;
  294. };
  295. static inline struct tegra_xusb_usb3_port *
  296. to_usb3_port(struct tegra_xusb_port *port)
  297. {
  298. return container_of(port, struct tegra_xusb_usb3_port, base);
  299. }
  300. struct tegra_xusb_usb3_port *
  301. tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl,
  302. unsigned int index);
  303. void tegra_xusb_usb3_port_release(struct tegra_xusb_port *port);
  304. void tegra_xusb_usb3_port_remove(struct tegra_xusb_port *port);
  305. struct tegra_xusb_port_ops {
  306. void (*release)(struct tegra_xusb_port *port);
  307. void (*remove)(struct tegra_xusb_port *port);
  308. int (*enable)(struct tegra_xusb_port *port);
  309. void (*disable)(struct tegra_xusb_port *port);
  310. struct tegra_xusb_lane *(*map)(struct tegra_xusb_port *port);
  311. };
  312. /*
  313. * pad controller
  314. */
  315. struct tegra_xusb_padctl_soc;
  316. struct tegra_xusb_padctl_ops {
  317. struct tegra_xusb_padctl *
  318. (*probe)(struct device *dev,
  319. const struct tegra_xusb_padctl_soc *soc);
  320. void (*remove)(struct tegra_xusb_padctl *padctl);
  321. int (*suspend_noirq)(struct tegra_xusb_padctl *padctl);
  322. int (*resume_noirq)(struct tegra_xusb_padctl *padctl);
  323. int (*usb3_save_context)(struct tegra_xusb_padctl *padctl,
  324. unsigned int index);
  325. int (*hsic_set_idle)(struct tegra_xusb_padctl *padctl,
  326. unsigned int index, bool idle);
  327. int (*usb3_set_lfps_detect)(struct tegra_xusb_padctl *padctl,
  328. unsigned int index, bool enable);
  329. int (*vbus_override)(struct tegra_xusb_padctl *padctl, bool set);
  330. int (*utmi_port_reset)(struct phy *phy);
  331. void (*utmi_pad_power_on)(struct phy *phy);
  332. void (*utmi_pad_power_down)(struct phy *phy);
  333. };
  334. struct tegra_xusb_padctl_soc {
  335. const struct tegra_xusb_pad_soc * const *pads;
  336. unsigned int num_pads;
  337. struct {
  338. struct {
  339. const struct tegra_xusb_port_ops *ops;
  340. unsigned int count;
  341. } usb2, ulpi, hsic, usb3;
  342. } ports;
  343. const struct tegra_xusb_padctl_ops *ops;
  344. const char * const *supply_names;
  345. unsigned int num_supplies;
  346. bool supports_gen2;
  347. bool need_fake_usb3_port;
  348. };
  349. struct tegra_xusb_padctl {
  350. struct device *dev;
  351. void __iomem *regs;
  352. struct mutex lock;
  353. struct reset_control *rst;
  354. const struct tegra_xusb_padctl_soc *soc;
  355. struct tegra_xusb_pad *pcie;
  356. struct tegra_xusb_pad *sata;
  357. struct tegra_xusb_pad *ulpi;
  358. struct tegra_xusb_pad *usb2;
  359. struct tegra_xusb_pad *hsic;
  360. struct list_head ports;
  361. struct list_head lanes;
  362. struct list_head pads;
  363. unsigned int enable;
  364. struct clk *clk;
  365. struct regulator_bulk_data *supplies;
  366. };
  367. static inline void padctl_writel(struct tegra_xusb_padctl *padctl, u32 value,
  368. unsigned long offset)
  369. {
  370. dev_dbg(padctl->dev, "%08lx < %08x\n", offset, value);
  371. writel(value, padctl->regs + offset);
  372. }
  373. static inline u32 padctl_readl(struct tegra_xusb_padctl *padctl,
  374. unsigned long offset)
  375. {
  376. u32 value = readl(padctl->regs + offset);
  377. dev_dbg(padctl->dev, "%08lx > %08x\n", offset, value);
  378. return value;
  379. }
  380. struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl,
  381. const char *name,
  382. unsigned int index);
  383. #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
  384. extern const struct tegra_xusb_padctl_soc tegra124_xusb_padctl_soc;
  385. #endif
  386. #if defined(CONFIG_ARCH_TEGRA_210_SOC)
  387. extern const struct tegra_xusb_padctl_soc tegra210_xusb_padctl_soc;
  388. #endif
  389. #if defined(CONFIG_ARCH_TEGRA_186_SOC)
  390. extern const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc;
  391. #endif
  392. #if defined(CONFIG_ARCH_TEGRA_194_SOC)
  393. extern const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc;
  394. #endif
  395. #endif /* __PHY_TEGRA_XUSB_H */