Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Copyright (c) 2014-2020, NVIDIA CORPORATION.  All rights reserved.
0004  * Copyright (c) 2015, Google Inc.
0005  */
0006 
0007 #ifndef __PHY_TEGRA_XUSB_H
0008 #define __PHY_TEGRA_XUSB_H
0009 
0010 #include <linux/io.h>
0011 #include <linux/mutex.h>
0012 #include <linux/workqueue.h>
0013 
0014 #include <linux/usb/ch9.h>
0015 #include <linux/usb/otg.h>
0016 #include <linux/usb/role.h>
0017 
0018 /* legacy entry points for backwards-compatibility */
0019 int tegra_xusb_padctl_legacy_probe(struct platform_device *pdev);
0020 int tegra_xusb_padctl_legacy_remove(struct platform_device *pdev);
0021 
0022 struct phy;
0023 struct phy_provider;
0024 struct platform_device;
0025 struct regulator;
0026 
0027 /*
0028  * lanes
0029  */
0030 struct tegra_xusb_lane_soc {
0031     const char *name;
0032 
0033     unsigned int offset;
0034     unsigned int shift;
0035     unsigned int mask;
0036 
0037     const char * const *funcs;
0038     unsigned int num_funcs;
0039 
0040     struct {
0041         unsigned int misc_ctl2;
0042     } regs;
0043 };
0044 
0045 struct tegra_xusb_lane {
0046     const struct tegra_xusb_lane_soc *soc;
0047     struct tegra_xusb_pad *pad;
0048     struct device_node *np;
0049     struct list_head list;
0050     unsigned int function;
0051     unsigned int index;
0052 };
0053 
0054 int tegra_xusb_lane_parse_dt(struct tegra_xusb_lane *lane,
0055                  struct device_node *np);
0056 
0057 struct tegra_xusb_usb3_lane {
0058     struct tegra_xusb_lane base;
0059 };
0060 
0061 static inline struct tegra_xusb_usb3_lane *
0062 to_usb3_lane(struct tegra_xusb_lane *lane)
0063 {
0064     return container_of(lane, struct tegra_xusb_usb3_lane, base);
0065 }
0066 
0067 struct tegra_xusb_usb2_lane {
0068     struct tegra_xusb_lane base;
0069 
0070     u32 hs_curr_level_offset;
0071     bool powered_on;
0072 };
0073 
0074 static inline struct tegra_xusb_usb2_lane *
0075 to_usb2_lane(struct tegra_xusb_lane *lane)
0076 {
0077     return container_of(lane, struct tegra_xusb_usb2_lane, base);
0078 }
0079 
0080 struct tegra_xusb_ulpi_lane {
0081     struct tegra_xusb_lane base;
0082 };
0083 
0084 static inline struct tegra_xusb_ulpi_lane *
0085 to_ulpi_lane(struct tegra_xusb_lane *lane)
0086 {
0087     return container_of(lane, struct tegra_xusb_ulpi_lane, base);
0088 }
0089 
0090 struct tegra_xusb_hsic_lane {
0091     struct tegra_xusb_lane base;
0092 
0093     u32 strobe_trim;
0094     u32 rx_strobe_trim;
0095     u32 rx_data_trim;
0096     u32 tx_rtune_n;
0097     u32 tx_rtune_p;
0098     u32 tx_rslew_n;
0099     u32 tx_rslew_p;
0100     bool auto_term;
0101 };
0102 
0103 static inline struct tegra_xusb_hsic_lane *
0104 to_hsic_lane(struct tegra_xusb_lane *lane)
0105 {
0106     return container_of(lane, struct tegra_xusb_hsic_lane, base);
0107 }
0108 
0109 struct tegra_xusb_pcie_lane {
0110     struct tegra_xusb_lane base;
0111 };
0112 
0113 static inline struct tegra_xusb_pcie_lane *
0114 to_pcie_lane(struct tegra_xusb_lane *lane)
0115 {
0116     return container_of(lane, struct tegra_xusb_pcie_lane, base);
0117 }
0118 
0119 struct tegra_xusb_sata_lane {
0120     struct tegra_xusb_lane base;
0121 };
0122 
0123 static inline struct tegra_xusb_sata_lane *
0124 to_sata_lane(struct tegra_xusb_lane *lane)
0125 {
0126     return container_of(lane, struct tegra_xusb_sata_lane, base);
0127 }
0128 
0129 struct tegra_xusb_lane_ops {
0130     struct tegra_xusb_lane *(*probe)(struct tegra_xusb_pad *pad,
0131                      struct device_node *np,
0132                      unsigned int index);
0133     void (*remove)(struct tegra_xusb_lane *lane);
0134     void (*iddq_enable)(struct tegra_xusb_lane *lane);
0135     void (*iddq_disable)(struct tegra_xusb_lane *lane);
0136     int (*enable_phy_sleepwalk)(struct tegra_xusb_lane *lane, enum usb_device_speed speed);
0137     int (*disable_phy_sleepwalk)(struct tegra_xusb_lane *lane);
0138     int (*enable_phy_wake)(struct tegra_xusb_lane *lane);
0139     int (*disable_phy_wake)(struct tegra_xusb_lane *lane);
0140     bool (*remote_wake_detected)(struct tegra_xusb_lane *lane);
0141 };
0142 
0143 bool tegra_xusb_lane_check(struct tegra_xusb_lane *lane, const char *function);
0144 
0145 /*
0146  * pads
0147  */
0148 struct tegra_xusb_pad_soc;
0149 struct tegra_xusb_padctl;
0150 
0151 struct tegra_xusb_pad_ops {
0152     struct tegra_xusb_pad *(*probe)(struct tegra_xusb_padctl *padctl,
0153                     const struct tegra_xusb_pad_soc *soc,
0154                     struct device_node *np);
0155     void (*remove)(struct tegra_xusb_pad *pad);
0156 };
0157 
0158 struct tegra_xusb_pad_soc {
0159     const char *name;
0160 
0161     const struct tegra_xusb_lane_soc *lanes;
0162     unsigned int num_lanes;
0163 
0164     const struct tegra_xusb_pad_ops *ops;
0165 };
0166 
0167 struct tegra_xusb_pad {
0168     const struct tegra_xusb_pad_soc *soc;
0169     struct tegra_xusb_padctl *padctl;
0170     struct phy_provider *provider;
0171     struct phy **lanes;
0172     struct device dev;
0173 
0174     const struct tegra_xusb_lane_ops *ops;
0175 
0176     struct list_head list;
0177 };
0178 
0179 static inline struct tegra_xusb_pad *to_tegra_xusb_pad(struct device *dev)
0180 {
0181     return container_of(dev, struct tegra_xusb_pad, dev);
0182 }
0183 
0184 int tegra_xusb_pad_init(struct tegra_xusb_pad *pad,
0185             struct tegra_xusb_padctl *padctl,
0186             struct device_node *np);
0187 int tegra_xusb_pad_register(struct tegra_xusb_pad *pad,
0188                 const struct phy_ops *ops);
0189 void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad);
0190 
0191 struct tegra_xusb_usb3_pad {
0192     struct tegra_xusb_pad base;
0193 
0194     unsigned int enable;
0195     struct mutex lock;
0196 };
0197 
0198 static inline struct tegra_xusb_usb3_pad *
0199 to_usb3_pad(struct tegra_xusb_pad *pad)
0200 {
0201     return container_of(pad, struct tegra_xusb_usb3_pad, base);
0202 }
0203 
0204 struct tegra_xusb_usb2_pad {
0205     struct tegra_xusb_pad base;
0206 
0207     struct clk *clk;
0208     unsigned int enable;
0209     struct mutex lock;
0210 };
0211 
0212 static inline struct tegra_xusb_usb2_pad *
0213 to_usb2_pad(struct tegra_xusb_pad *pad)
0214 {
0215     return container_of(pad, struct tegra_xusb_usb2_pad, base);
0216 }
0217 
0218 struct tegra_xusb_ulpi_pad {
0219     struct tegra_xusb_pad base;
0220 };
0221 
0222 static inline struct tegra_xusb_ulpi_pad *
0223 to_ulpi_pad(struct tegra_xusb_pad *pad)
0224 {
0225     return container_of(pad, struct tegra_xusb_ulpi_pad, base);
0226 }
0227 
0228 struct tegra_xusb_hsic_pad {
0229     struct tegra_xusb_pad base;
0230 
0231     struct regulator *supply;
0232     struct clk *clk;
0233 };
0234 
0235 static inline struct tegra_xusb_hsic_pad *
0236 to_hsic_pad(struct tegra_xusb_pad *pad)
0237 {
0238     return container_of(pad, struct tegra_xusb_hsic_pad, base);
0239 }
0240 
0241 struct tegra_xusb_pcie_pad {
0242     struct tegra_xusb_pad base;
0243 
0244     struct reset_control *rst;
0245     struct clk *pll;
0246 
0247     bool enable;
0248 };
0249 
0250 static inline struct tegra_xusb_pcie_pad *
0251 to_pcie_pad(struct tegra_xusb_pad *pad)
0252 {
0253     return container_of(pad, struct tegra_xusb_pcie_pad, base);
0254 }
0255 
0256 struct tegra_xusb_sata_pad {
0257     struct tegra_xusb_pad base;
0258 
0259     struct reset_control *rst;
0260     struct clk *pll;
0261 
0262     bool enable;
0263 };
0264 
0265 static inline struct tegra_xusb_sata_pad *
0266 to_sata_pad(struct tegra_xusb_pad *pad)
0267 {
0268     return container_of(pad, struct tegra_xusb_sata_pad, base);
0269 }
0270 
0271 /*
0272  * ports
0273  */
0274 struct tegra_xusb_port_ops;
0275 
0276 struct tegra_xusb_port {
0277     struct tegra_xusb_padctl *padctl;
0278     struct tegra_xusb_lane *lane;
0279     unsigned int index;
0280 
0281     struct list_head list;
0282     struct device dev;
0283 
0284     struct usb_role_switch *usb_role_sw;
0285     struct work_struct usb_phy_work;
0286     struct usb_phy usb_phy;
0287 
0288     const struct tegra_xusb_port_ops *ops;
0289 };
0290 
0291 static inline struct tegra_xusb_port *to_tegra_xusb_port(struct device *dev)
0292 {
0293     return container_of(dev, struct tegra_xusb_port, dev);
0294 }
0295 
0296 struct tegra_xusb_lane_map {
0297     unsigned int port;
0298     const char *type;
0299     unsigned int index;
0300     const char *func;
0301 };
0302 
0303 struct tegra_xusb_lane *
0304 tegra_xusb_port_find_lane(struct tegra_xusb_port *port,
0305               const struct tegra_xusb_lane_map *map,
0306               const char *function);
0307 
0308 struct tegra_xusb_port *
0309 tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type,
0310              unsigned int index);
0311 
0312 struct tegra_xusb_usb2_port {
0313     struct tegra_xusb_port base;
0314 
0315     struct regulator *supply;
0316     enum usb_dr_mode mode;
0317     bool internal;
0318     int usb3_port_fake;
0319 };
0320 
0321 static inline struct tegra_xusb_usb2_port *
0322 to_usb2_port(struct tegra_xusb_port *port)
0323 {
0324     return container_of(port, struct tegra_xusb_usb2_port, base);
0325 }
0326 
0327 struct tegra_xusb_usb2_port *
0328 tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl,
0329               unsigned int index);
0330 void tegra_xusb_usb2_port_release(struct tegra_xusb_port *port);
0331 void tegra_xusb_usb2_port_remove(struct tegra_xusb_port *port);
0332 
0333 struct tegra_xusb_ulpi_port {
0334     struct tegra_xusb_port base;
0335 
0336     struct regulator *supply;
0337     bool internal;
0338 };
0339 
0340 static inline struct tegra_xusb_ulpi_port *
0341 to_ulpi_port(struct tegra_xusb_port *port)
0342 {
0343     return container_of(port, struct tegra_xusb_ulpi_port, base);
0344 }
0345 
0346 void tegra_xusb_ulpi_port_release(struct tegra_xusb_port *port);
0347 
0348 struct tegra_xusb_hsic_port {
0349     struct tegra_xusb_port base;
0350 };
0351 
0352 static inline struct tegra_xusb_hsic_port *
0353 to_hsic_port(struct tegra_xusb_port *port)
0354 {
0355     return container_of(port, struct tegra_xusb_hsic_port, base);
0356 }
0357 
0358 void tegra_xusb_hsic_port_release(struct tegra_xusb_port *port);
0359 
0360 struct tegra_xusb_usb3_port {
0361     struct tegra_xusb_port base;
0362     struct regulator *supply;
0363     bool context_saved;
0364     unsigned int port;
0365     bool internal;
0366     bool disable_gen2;
0367 
0368     u32 tap1;
0369     u32 amp;
0370     u32 ctle_z;
0371     u32 ctle_g;
0372 };
0373 
0374 static inline struct tegra_xusb_usb3_port *
0375 to_usb3_port(struct tegra_xusb_port *port)
0376 {
0377     return container_of(port, struct tegra_xusb_usb3_port, base);
0378 }
0379 
0380 struct tegra_xusb_usb3_port *
0381 tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl,
0382               unsigned int index);
0383 void tegra_xusb_usb3_port_release(struct tegra_xusb_port *port);
0384 void tegra_xusb_usb3_port_remove(struct tegra_xusb_port *port);
0385 
0386 struct tegra_xusb_port_ops {
0387     void (*release)(struct tegra_xusb_port *port);
0388     void (*remove)(struct tegra_xusb_port *port);
0389     int (*enable)(struct tegra_xusb_port *port);
0390     void (*disable)(struct tegra_xusb_port *port);
0391     struct tegra_xusb_lane *(*map)(struct tegra_xusb_port *port);
0392 };
0393 
0394 /*
0395  * pad controller
0396  */
0397 struct tegra_xusb_padctl_soc;
0398 
0399 struct tegra_xusb_padctl_ops {
0400     struct tegra_xusb_padctl *
0401         (*probe)(struct device *dev,
0402              const struct tegra_xusb_padctl_soc *soc);
0403     void (*remove)(struct tegra_xusb_padctl *padctl);
0404 
0405     int (*suspend_noirq)(struct tegra_xusb_padctl *padctl);
0406     int (*resume_noirq)(struct tegra_xusb_padctl *padctl);
0407     int (*usb3_save_context)(struct tegra_xusb_padctl *padctl,
0408                  unsigned int index);
0409     int (*hsic_set_idle)(struct tegra_xusb_padctl *padctl,
0410                  unsigned int index, bool idle);
0411     int (*usb3_set_lfps_detect)(struct tegra_xusb_padctl *padctl,
0412                     unsigned int index, bool enable);
0413     int (*vbus_override)(struct tegra_xusb_padctl *padctl, bool set);
0414     int (*utmi_port_reset)(struct phy *phy);
0415 };
0416 
0417 struct tegra_xusb_padctl_soc {
0418     const struct tegra_xusb_pad_soc * const *pads;
0419     unsigned int num_pads;
0420 
0421     struct {
0422         struct {
0423             const struct tegra_xusb_port_ops *ops;
0424             unsigned int count;
0425         } usb2, ulpi, hsic, usb3;
0426     } ports;
0427 
0428     const struct tegra_xusb_padctl_ops *ops;
0429 
0430     const char * const *supply_names;
0431     unsigned int num_supplies;
0432     bool supports_gen2;
0433     bool need_fake_usb3_port;
0434 };
0435 
0436 struct tegra_xusb_padctl {
0437     struct device *dev;
0438     void __iomem *regs;
0439     struct mutex lock;
0440     struct reset_control *rst;
0441 
0442     const struct tegra_xusb_padctl_soc *soc;
0443 
0444     struct tegra_xusb_pad *pcie;
0445     struct tegra_xusb_pad *sata;
0446     struct tegra_xusb_pad *ulpi;
0447     struct tegra_xusb_pad *usb2;
0448     struct tegra_xusb_pad *hsic;
0449 
0450     struct list_head ports;
0451     struct list_head lanes;
0452     struct list_head pads;
0453 
0454     unsigned int enable;
0455 
0456     struct clk *clk;
0457 
0458     struct regulator_bulk_data *supplies;
0459 };
0460 
0461 static inline void padctl_writel(struct tegra_xusb_padctl *padctl, u32 value,
0462                  unsigned long offset)
0463 {
0464     dev_dbg(padctl->dev, "%08lx < %08x\n", offset, value);
0465     writel(value, padctl->regs + offset);
0466 }
0467 
0468 static inline u32 padctl_readl(struct tegra_xusb_padctl *padctl,
0469                    unsigned long offset)
0470 {
0471     u32 value = readl(padctl->regs + offset);
0472     dev_dbg(padctl->dev, "%08lx > %08x\n", offset, value);
0473     return value;
0474 }
0475 
0476 struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl,
0477                          const char *name,
0478                          unsigned int index);
0479 
0480 #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
0481 extern const struct tegra_xusb_padctl_soc tegra124_xusb_padctl_soc;
0482 #endif
0483 #if defined(CONFIG_ARCH_TEGRA_210_SOC)
0484 extern const struct tegra_xusb_padctl_soc tegra210_xusb_padctl_soc;
0485 #endif
0486 #if defined(CONFIG_ARCH_TEGRA_186_SOC)
0487 extern const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc;
0488 #endif
0489 #if defined(CONFIG_ARCH_TEGRA_194_SOC)
0490 extern const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc;
0491 #endif
0492 
0493 #endif /* __PHY_TEGRA_XUSB_H */