root/drivers/phy/tegra/xusb-tegra186.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. to_tegra186_xusb_padctl
  2. tegra186_usb2_lane_probe
  3. tegra186_usb2_lane_remove
  4. tegra186_utmi_bias_pad_power_on
  5. tegra186_utmi_bias_pad_power_off
  6. tegra_phy_xusb_utmi_pad_power_on
  7. tegra_phy_xusb_utmi_pad_power_down
  8. tegra186_utmi_phy_power_on
  9. tegra186_utmi_phy_power_off
  10. tegra186_utmi_phy_init
  11. tegra186_utmi_phy_exit
  12. tegra186_usb2_pad_probe
  13. tegra186_usb2_pad_remove
  14. tegra186_usb2_port_enable
  15. tegra186_usb2_port_disable
  16. tegra186_usb2_port_map
  17. tegra186_usb3_lane_probe
  18. tegra186_usb3_lane_remove
  19. tegra186_usb3_port_enable
  20. tegra186_usb3_port_disable
  21. tegra186_usb3_port_map
  22. tegra186_usb3_phy_power_on
  23. tegra186_usb3_phy_power_off
  24. tegra186_usb3_phy_init
  25. tegra186_usb3_phy_exit
  26. tegra186_usb3_pad_probe
  27. tegra186_usb3_pad_remove
  28. tegra186_xusb_read_fuse_calibration
  29. tegra186_xusb_padctl_probe
  30. tegra186_xusb_padctl_remove

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Copyright (c) 2016-2019, NVIDIA CORPORATION.  All rights reserved.
   4  */
   5 
   6 #include <linux/delay.h>
   7 #include <linux/io.h>
   8 #include <linux/module.h>
   9 #include <linux/of.h>
  10 #include <linux/phy/phy.h>
  11 #include <linux/regulator/consumer.h>
  12 #include <linux/platform_device.h>
  13 #include <linux/clk.h>
  14 #include <linux/slab.h>
  15 
  16 #include <soc/tegra/fuse.h>
  17 
  18 #include "xusb.h"
  19 
  20 /* FUSE USB_CALIB registers */
  21 #define HS_CURR_LEVEL_PADX_SHIFT(x)     ((x) ? (11 + (x - 1) * 6) : 0)
  22 #define HS_CURR_LEVEL_PAD_MASK          0x3f
  23 #define HS_TERM_RANGE_ADJ_SHIFT         7
  24 #define HS_TERM_RANGE_ADJ_MASK          0xf
  25 #define HS_SQUELCH_SHIFT                29
  26 #define HS_SQUELCH_MASK                 0x7
  27 
  28 #define RPD_CTRL_SHIFT                  0
  29 #define RPD_CTRL_MASK                   0x1f
  30 
  31 /* XUSB PADCTL registers */
  32 #define XUSB_PADCTL_USB2_PAD_MUX        0x4
  33 #define  USB2_PORT_SHIFT(x)             ((x) * 2)
  34 #define  USB2_PORT_MASK                 0x3
  35 #define   PORT_XUSB                     1
  36 #define  HSIC_PORT_SHIFT(x)             ((x) + 20)
  37 #define  HSIC_PORT_MASK                 0x1
  38 #define   PORT_HSIC                     0
  39 
  40 #define XUSB_PADCTL_USB2_PORT_CAP       0x8
  41 #define XUSB_PADCTL_SS_PORT_CAP         0xc
  42 #define  PORTX_CAP_SHIFT(x)             ((x) * 4)
  43 #define  PORT_CAP_MASK                  0x3
  44 #define   PORT_CAP_DISABLED             0x0
  45 #define   PORT_CAP_HOST                 0x1
  46 #define   PORT_CAP_DEVICE               0x2
  47 #define   PORT_CAP_OTG                  0x3
  48 
  49 #define XUSB_PADCTL_ELPG_PROGRAM                0x20
  50 #define  USB2_PORT_WAKE_INTERRUPT_ENABLE(x)             BIT(x)
  51 #define  USB2_PORT_WAKEUP_EVENT(x)                      BIT((x) +  7)
  52 #define  SS_PORT_WAKE_INTERRUPT_ENABLE(x)               BIT((x) + 14)
  53 #define  SS_PORT_WAKEUP_EVENT(x)                        BIT((x) + 21)
  54 #define  USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(x)        BIT((x) + 28)
  55 #define  USB2_HSIC_PORT_WAKEUP_EVENT(x)                 BIT((x) + 30)
  56 #define  ALL_WAKE_EVENTS                                                \
  57         (USB2_PORT_WAKEUP_EVENT(0) | USB2_PORT_WAKEUP_EVENT(1) |        \
  58         USB2_PORT_WAKEUP_EVENT(2) | SS_PORT_WAKEUP_EVENT(0) |           \
  59         SS_PORT_WAKEUP_EVENT(1) | SS_PORT_WAKEUP_EVENT(2) |             \
  60         USB2_HSIC_PORT_WAKEUP_EVENT(0))
  61 
  62 #define XUSB_PADCTL_ELPG_PROGRAM_1              0x24
  63 #define  SSPX_ELPG_CLAMP_EN(x)                  BIT(0 + (x) * 3)
  64 #define  SSPX_ELPG_CLAMP_EN_EARLY(x)            BIT(1 + (x) * 3)
  65 #define  SSPX_ELPG_VCORE_DOWN(x)                BIT(2 + (x) * 3)
  66 
  67 #define XUSB_PADCTL_USB2_OTG_PADX_CTL0(x)       (0x88 + (x) * 0x40)
  68 #define  HS_CURR_LEVEL(x)                       ((x) & 0x3f)
  69 #define  TERM_SEL                               BIT(25)
  70 #define  USB2_OTG_PD                            BIT(26)
  71 #define  USB2_OTG_PD2                           BIT(27)
  72 #define  USB2_OTG_PD2_OVRD_EN                   BIT(28)
  73 #define  USB2_OTG_PD_ZI                         BIT(29)
  74 
  75 #define XUSB_PADCTL_USB2_OTG_PADX_CTL1(x)       (0x8c + (x) * 0x40)
  76 #define  USB2_OTG_PD_DR                         BIT(2)
  77 #define  TERM_RANGE_ADJ(x)                      (((x) & 0xf) << 3)
  78 #define  RPD_CTRL(x)                            (((x) & 0x1f) << 26)
  79 
  80 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0          0x284
  81 #define  BIAS_PAD_PD                            BIT(11)
  82 #define  HS_SQUELCH_LEVEL(x)                    (((x) & 0x7) << 0)
  83 
  84 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1          0x288
  85 #define  USB2_TRK_START_TIMER(x)                (((x) & 0x7f) << 12)
  86 #define  USB2_TRK_DONE_RESET_TIMER(x)           (((x) & 0x7f) << 19)
  87 #define  USB2_PD_TRK                            BIT(26)
  88 
  89 #define XUSB_PADCTL_HSIC_PADX_CTL0(x)           (0x300 + (x) * 0x20)
  90 #define  HSIC_PD_TX_DATA0                       BIT(1)
  91 #define  HSIC_PD_TX_STROBE                      BIT(3)
  92 #define  HSIC_PD_RX_DATA0                       BIT(4)
  93 #define  HSIC_PD_RX_STROBE                      BIT(6)
  94 #define  HSIC_PD_ZI_DATA0                       BIT(7)
  95 #define  HSIC_PD_ZI_STROBE                      BIT(9)
  96 #define  HSIC_RPD_DATA0                         BIT(13)
  97 #define  HSIC_RPD_STROBE                        BIT(15)
  98 #define  HSIC_RPU_DATA0                         BIT(16)
  99 #define  HSIC_RPU_STROBE                        BIT(18)
 100 
 101 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL0           0x340
 102 #define  HSIC_TRK_START_TIMER(x)                (((x) & 0x7f) << 5)
 103 #define  HSIC_TRK_DONE_RESET_TIMER(x)           (((x) & 0x7f) << 12)
 104 #define  HSIC_PD_TRK                            BIT(19)
 105 
 106 #define USB2_VBUS_ID                            0x360
 107 #define  VBUS_OVERRIDE                          BIT(14)
 108 #define  ID_OVERRIDE(x)                         (((x) & 0xf) << 18)
 109 #define  ID_OVERRIDE_FLOATING                   ID_OVERRIDE(8)
 110 #define  ID_OVERRIDE_GROUNDED                   ID_OVERRIDE(0)
 111 
 112 #define TEGRA186_LANE(_name, _offset, _shift, _mask, _type)             \
 113         {                                                               \
 114                 .name = _name,                                          \
 115                 .offset = _offset,                                      \
 116                 .shift = _shift,                                        \
 117                 .mask = _mask,                                          \
 118                 .num_funcs = ARRAY_SIZE(tegra186_##_type##_functions),  \
 119                 .funcs = tegra186_##_type##_functions,                  \
 120         }
 121 
 122 struct tegra_xusb_fuse_calibration {
 123         u32 *hs_curr_level;
 124         u32 hs_squelch;
 125         u32 hs_term_range_adj;
 126         u32 rpd_ctrl;
 127 };
 128 
 129 struct tegra186_xusb_padctl {
 130         struct tegra_xusb_padctl base;
 131 
 132         struct tegra_xusb_fuse_calibration calib;
 133 
 134         /* UTMI bias and tracking */
 135         struct clk *usb2_trk_clk;
 136         unsigned int bias_pad_enable;
 137 };
 138 
 139 static inline struct tegra186_xusb_padctl *
 140 to_tegra186_xusb_padctl(struct tegra_xusb_padctl *padctl)
 141 {
 142         return container_of(padctl, struct tegra186_xusb_padctl, base);
 143 }
 144 
 145 /* USB 2.0 UTMI PHY support */
 146 static struct tegra_xusb_lane *
 147 tegra186_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 148                          unsigned int index)
 149 {
 150         struct tegra_xusb_usb2_lane *usb2;
 151         int err;
 152 
 153         usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
 154         if (!usb2)
 155                 return ERR_PTR(-ENOMEM);
 156 
 157         INIT_LIST_HEAD(&usb2->base.list);
 158         usb2->base.soc = &pad->soc->lanes[index];
 159         usb2->base.index = index;
 160         usb2->base.pad = pad;
 161         usb2->base.np = np;
 162 
 163         err = tegra_xusb_lane_parse_dt(&usb2->base, np);
 164         if (err < 0) {
 165                 kfree(usb2);
 166                 return ERR_PTR(err);
 167         }
 168 
 169         return &usb2->base;
 170 }
 171 
 172 static void tegra186_usb2_lane_remove(struct tegra_xusb_lane *lane)
 173 {
 174         struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
 175 
 176         kfree(usb2);
 177 }
 178 
 179 static const struct tegra_xusb_lane_ops tegra186_usb2_lane_ops = {
 180         .probe = tegra186_usb2_lane_probe,
 181         .remove = tegra186_usb2_lane_remove,
 182 };
 183 
 184 static void tegra186_utmi_bias_pad_power_on(struct tegra_xusb_padctl *padctl)
 185 {
 186         struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 187         struct device *dev = padctl->dev;
 188         u32 value;
 189         int err;
 190 
 191         mutex_lock(&padctl->lock);
 192 
 193         if (priv->bias_pad_enable++ > 0) {
 194                 mutex_unlock(&padctl->lock);
 195                 return;
 196         }
 197 
 198         err = clk_prepare_enable(priv->usb2_trk_clk);
 199         if (err < 0)
 200                 dev_warn(dev, "failed to enable USB2 trk clock: %d\n", err);
 201 
 202         value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 203         value &= ~USB2_TRK_START_TIMER(~0);
 204         value |= USB2_TRK_START_TIMER(0x1e);
 205         value &= ~USB2_TRK_DONE_RESET_TIMER(~0);
 206         value |= USB2_TRK_DONE_RESET_TIMER(0xa);
 207         padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 208 
 209         value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
 210         value &= ~BIAS_PAD_PD;
 211         value &= ~HS_SQUELCH_LEVEL(~0);
 212         value |= HS_SQUELCH_LEVEL(priv->calib.hs_squelch);
 213         padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
 214 
 215         udelay(1);
 216 
 217         value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 218         value &= ~USB2_PD_TRK;
 219         padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 220 
 221         mutex_unlock(&padctl->lock);
 222 }
 223 
 224 static void tegra186_utmi_bias_pad_power_off(struct tegra_xusb_padctl *padctl)
 225 {
 226         struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 227         u32 value;
 228 
 229         mutex_lock(&padctl->lock);
 230 
 231         if (WARN_ON(priv->bias_pad_enable == 0)) {
 232                 mutex_unlock(&padctl->lock);
 233                 return;
 234         }
 235 
 236         if (--priv->bias_pad_enable > 0) {
 237                 mutex_unlock(&padctl->lock);
 238                 return;
 239         }
 240 
 241         value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 242         value |= USB2_PD_TRK;
 243         padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 244 
 245         clk_disable_unprepare(priv->usb2_trk_clk);
 246 
 247         mutex_unlock(&padctl->lock);
 248 }
 249 
 250 static void tegra_phy_xusb_utmi_pad_power_on(struct phy *phy)
 251 {
 252         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 253         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 254         struct tegra_xusb_usb2_port *port;
 255         struct device *dev = padctl->dev;
 256         unsigned int index = lane->index;
 257         u32 value;
 258 
 259         if (!phy)
 260                 return;
 261 
 262         port = tegra_xusb_find_usb2_port(padctl, index);
 263         if (!port) {
 264                 dev_err(dev, "no port found for USB2 lane %u\n", index);
 265                 return;
 266         }
 267 
 268         tegra186_utmi_bias_pad_power_on(padctl);
 269 
 270         udelay(2);
 271 
 272         value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 273         value &= ~USB2_OTG_PD;
 274         padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 275 
 276         value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 277         value &= ~USB2_OTG_PD_DR;
 278         padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 279 }
 280 
 281 static void tegra_phy_xusb_utmi_pad_power_down(struct phy *phy)
 282 {
 283         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 284         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 285         unsigned int index = lane->index;
 286         u32 value;
 287 
 288         if (!phy)
 289                 return;
 290 
 291         value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 292         value |= USB2_OTG_PD;
 293         padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 294 
 295         value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 296         value |= USB2_OTG_PD_DR;
 297         padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 298 
 299         udelay(2);
 300 
 301         tegra186_utmi_bias_pad_power_off(padctl);
 302 }
 303 
 304 static int tegra186_utmi_phy_power_on(struct phy *phy)
 305 {
 306         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 307         struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
 308         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 309         struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 310         struct tegra_xusb_usb2_port *port;
 311         unsigned int index = lane->index;
 312         struct device *dev = padctl->dev;
 313         u32 value;
 314 
 315         port = tegra_xusb_find_usb2_port(padctl, index);
 316         if (!port) {
 317                 dev_err(dev, "no port found for USB2 lane %u\n", index);
 318                 return -ENODEV;
 319         }
 320 
 321         value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
 322         value &= ~(USB2_PORT_MASK << USB2_PORT_SHIFT(index));
 323         value |= (PORT_XUSB << USB2_PORT_SHIFT(index));
 324         padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
 325 
 326         value = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
 327         value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index));
 328 
 329         if (port->mode == USB_DR_MODE_UNKNOWN)
 330                 value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index));
 331         else if (port->mode == USB_DR_MODE_PERIPHERAL)
 332                 value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index));
 333         else if (port->mode == USB_DR_MODE_HOST)
 334                 value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index));
 335         else if (port->mode == USB_DR_MODE_OTG)
 336                 value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index));
 337 
 338         padctl_writel(padctl, value, XUSB_PADCTL_USB2_PORT_CAP);
 339 
 340         value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 341         value &= ~USB2_OTG_PD_ZI;
 342         value |= TERM_SEL;
 343         value &= ~HS_CURR_LEVEL(~0);
 344 
 345         if (usb2->hs_curr_level_offset) {
 346                 int hs_current_level;
 347 
 348                 hs_current_level = (int)priv->calib.hs_curr_level[index] +
 349                                                 usb2->hs_curr_level_offset;
 350 
 351                 if (hs_current_level < 0)
 352                         hs_current_level = 0;
 353                 if (hs_current_level > 0x3f)
 354                         hs_current_level = 0x3f;
 355 
 356                 value |= HS_CURR_LEVEL(hs_current_level);
 357         } else {
 358                 value |= HS_CURR_LEVEL(priv->calib.hs_curr_level[index]);
 359         }
 360 
 361         padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 362 
 363         value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 364         value &= ~TERM_RANGE_ADJ(~0);
 365         value |= TERM_RANGE_ADJ(priv->calib.hs_term_range_adj);
 366         value &= ~RPD_CTRL(~0);
 367         value |= RPD_CTRL(priv->calib.rpd_ctrl);
 368         padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 369 
 370         /* TODO: pad power saving */
 371         tegra_phy_xusb_utmi_pad_power_on(phy);
 372         return 0;
 373 }
 374 
 375 static int tegra186_utmi_phy_power_off(struct phy *phy)
 376 {
 377         /* TODO: pad power saving */
 378         tegra_phy_xusb_utmi_pad_power_down(phy);
 379 
 380         return 0;
 381 }
 382 
 383 static int tegra186_utmi_phy_init(struct phy *phy)
 384 {
 385         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 386         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 387         struct tegra_xusb_usb2_port *port;
 388         unsigned int index = lane->index;
 389         struct device *dev = padctl->dev;
 390         int err;
 391 
 392         port = tegra_xusb_find_usb2_port(padctl, index);
 393         if (!port) {
 394                 dev_err(dev, "no port found for USB2 lane %u\n", index);
 395                 return -ENODEV;
 396         }
 397 
 398         if (port->supply && port->mode == USB_DR_MODE_HOST) {
 399                 err = regulator_enable(port->supply);
 400                 if (err) {
 401                         dev_err(dev, "failed to enable port %u VBUS: %d\n",
 402                                 index, err);
 403                         return err;
 404                 }
 405         }
 406 
 407         return 0;
 408 }
 409 
 410 static int tegra186_utmi_phy_exit(struct phy *phy)
 411 {
 412         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 413         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 414         struct tegra_xusb_usb2_port *port;
 415         unsigned int index = lane->index;
 416         struct device *dev = padctl->dev;
 417         int err;
 418 
 419         port = tegra_xusb_find_usb2_port(padctl, index);
 420         if (!port) {
 421                 dev_err(dev, "no port found for USB2 lane %u\n", index);
 422                 return -ENODEV;
 423         }
 424 
 425         if (port->supply && port->mode == USB_DR_MODE_HOST) {
 426                 err = regulator_disable(port->supply);
 427                 if (err) {
 428                         dev_err(dev, "failed to disable port %u VBUS: %d\n",
 429                                 index, err);
 430                         return err;
 431                 }
 432         }
 433 
 434         return 0;
 435 }
 436 
 437 static const struct phy_ops utmi_phy_ops = {
 438         .init = tegra186_utmi_phy_init,
 439         .exit = tegra186_utmi_phy_exit,
 440         .power_on = tegra186_utmi_phy_power_on,
 441         .power_off = tegra186_utmi_phy_power_off,
 442         .owner = THIS_MODULE,
 443 };
 444 
 445 static struct tegra_xusb_pad *
 446 tegra186_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
 447                         const struct tegra_xusb_pad_soc *soc,
 448                         struct device_node *np)
 449 {
 450         struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 451         struct tegra_xusb_usb2_pad *usb2;
 452         struct tegra_xusb_pad *pad;
 453         int err;
 454 
 455         usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
 456         if (!usb2)
 457                 return ERR_PTR(-ENOMEM);
 458 
 459         pad = &usb2->base;
 460         pad->ops = &tegra186_usb2_lane_ops;
 461         pad->soc = soc;
 462 
 463         err = tegra_xusb_pad_init(pad, padctl, np);
 464         if (err < 0) {
 465                 kfree(usb2);
 466                 goto out;
 467         }
 468 
 469         priv->usb2_trk_clk = devm_clk_get(&pad->dev, "trk");
 470         if (IS_ERR(priv->usb2_trk_clk)) {
 471                 err = PTR_ERR(priv->usb2_trk_clk);
 472                 dev_dbg(&pad->dev, "failed to get usb2 trk clock: %d\n", err);
 473                 goto unregister;
 474         }
 475 
 476         err = tegra_xusb_pad_register(pad, &utmi_phy_ops);
 477         if (err < 0)
 478                 goto unregister;
 479 
 480         dev_set_drvdata(&pad->dev, pad);
 481 
 482         return pad;
 483 
 484 unregister:
 485         device_unregister(&pad->dev);
 486 out:
 487         return ERR_PTR(err);
 488 }
 489 
 490 static void tegra186_usb2_pad_remove(struct tegra_xusb_pad *pad)
 491 {
 492         struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
 493 
 494         kfree(usb2);
 495 }
 496 
 497 static const struct tegra_xusb_pad_ops tegra186_usb2_pad_ops = {
 498         .probe = tegra186_usb2_pad_probe,
 499         .remove = tegra186_usb2_pad_remove,
 500 };
 501 
 502 static const char * const tegra186_usb2_functions[] = {
 503         "xusb",
 504 };
 505 
 506 static const struct tegra_xusb_lane_soc tegra186_usb2_lanes[] = {
 507         TEGRA186_LANE("usb2-0", 0,  0, 0, usb2),
 508         TEGRA186_LANE("usb2-1", 0,  0, 0, usb2),
 509         TEGRA186_LANE("usb2-2", 0,  0, 0, usb2),
 510 };
 511 
 512 static const struct tegra_xusb_pad_soc tegra186_usb2_pad = {
 513         .name = "usb2",
 514         .num_lanes = ARRAY_SIZE(tegra186_usb2_lanes),
 515         .lanes = tegra186_usb2_lanes,
 516         .ops = &tegra186_usb2_pad_ops,
 517 };
 518 
 519 static int tegra186_usb2_port_enable(struct tegra_xusb_port *port)
 520 {
 521         return 0;
 522 }
 523 
 524 static void tegra186_usb2_port_disable(struct tegra_xusb_port *port)
 525 {
 526 }
 527 
 528 static struct tegra_xusb_lane *
 529 tegra186_usb2_port_map(struct tegra_xusb_port *port)
 530 {
 531         return tegra_xusb_find_lane(port->padctl, "usb2", port->index);
 532 }
 533 
 534 static const struct tegra_xusb_port_ops tegra186_usb2_port_ops = {
 535         .enable = tegra186_usb2_port_enable,
 536         .disable = tegra186_usb2_port_disable,
 537         .map = tegra186_usb2_port_map,
 538 };
 539 
 540 /* SuperSpeed PHY support */
 541 static struct tegra_xusb_lane *
 542 tegra186_usb3_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 543                          unsigned int index)
 544 {
 545         struct tegra_xusb_usb3_lane *usb3;
 546         int err;
 547 
 548         usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
 549         if (!usb3)
 550                 return ERR_PTR(-ENOMEM);
 551 
 552         INIT_LIST_HEAD(&usb3->base.list);
 553         usb3->base.soc = &pad->soc->lanes[index];
 554         usb3->base.index = index;
 555         usb3->base.pad = pad;
 556         usb3->base.np = np;
 557 
 558         err = tegra_xusb_lane_parse_dt(&usb3->base, np);
 559         if (err < 0) {
 560                 kfree(usb3);
 561                 return ERR_PTR(err);
 562         }
 563 
 564         return &usb3->base;
 565 }
 566 
 567 static void tegra186_usb3_lane_remove(struct tegra_xusb_lane *lane)
 568 {
 569         struct tegra_xusb_usb3_lane *usb3 = to_usb3_lane(lane);
 570 
 571         kfree(usb3);
 572 }
 573 
 574 static const struct tegra_xusb_lane_ops tegra186_usb3_lane_ops = {
 575         .probe = tegra186_usb3_lane_probe,
 576         .remove = tegra186_usb3_lane_remove,
 577 };
 578 static int tegra186_usb3_port_enable(struct tegra_xusb_port *port)
 579 {
 580         return 0;
 581 }
 582 
 583 static void tegra186_usb3_port_disable(struct tegra_xusb_port *port)
 584 {
 585 }
 586 
 587 static struct tegra_xusb_lane *
 588 tegra186_usb3_port_map(struct tegra_xusb_port *port)
 589 {
 590         return tegra_xusb_find_lane(port->padctl, "usb3", port->index);
 591 }
 592 
 593 static const struct tegra_xusb_port_ops tegra186_usb3_port_ops = {
 594         .enable = tegra186_usb3_port_enable,
 595         .disable = tegra186_usb3_port_disable,
 596         .map = tegra186_usb3_port_map,
 597 };
 598 
 599 static int tegra186_usb3_phy_power_on(struct phy *phy)
 600 {
 601         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 602         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 603         struct tegra_xusb_usb3_port *port;
 604         struct tegra_xusb_usb2_port *usb2;
 605         unsigned int index = lane->index;
 606         struct device *dev = padctl->dev;
 607         u32 value;
 608 
 609         port = tegra_xusb_find_usb3_port(padctl, index);
 610         if (!port) {
 611                 dev_err(dev, "no port found for USB3 lane %u\n", index);
 612                 return -ENODEV;
 613         }
 614 
 615         usb2 = tegra_xusb_find_usb2_port(padctl, port->port);
 616         if (!usb2) {
 617                 dev_err(dev, "no companion port found for USB3 lane %u\n",
 618                         index);
 619                 return -ENODEV;
 620         }
 621 
 622         mutex_lock(&padctl->lock);
 623 
 624         value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CAP);
 625         value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index));
 626 
 627         if (usb2->mode == USB_DR_MODE_UNKNOWN)
 628                 value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index));
 629         else if (usb2->mode == USB_DR_MODE_PERIPHERAL)
 630                 value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index));
 631         else if (usb2->mode == USB_DR_MODE_HOST)
 632                 value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index));
 633         else if (usb2->mode == USB_DR_MODE_OTG)
 634                 value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index));
 635 
 636         padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CAP);
 637 
 638         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 639         value &= ~SSPX_ELPG_VCORE_DOWN(index);
 640         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 641 
 642         usleep_range(100, 200);
 643 
 644         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 645         value &= ~SSPX_ELPG_CLAMP_EN_EARLY(index);
 646         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 647 
 648         usleep_range(100, 200);
 649 
 650         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 651         value &= ~SSPX_ELPG_CLAMP_EN(index);
 652         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 653 
 654         mutex_unlock(&padctl->lock);
 655 
 656         return 0;
 657 }
 658 
 659 static int tegra186_usb3_phy_power_off(struct phy *phy)
 660 {
 661         struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 662         struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 663         struct tegra_xusb_usb3_port *port;
 664         unsigned int index = lane->index;
 665         struct device *dev = padctl->dev;
 666         u32 value;
 667 
 668         port = tegra_xusb_find_usb3_port(padctl, index);
 669         if (!port) {
 670                 dev_err(dev, "no port found for USB3 lane %u\n", index);
 671                 return -ENODEV;
 672         }
 673 
 674         mutex_lock(&padctl->lock);
 675 
 676         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 677         value |= SSPX_ELPG_CLAMP_EN_EARLY(index);
 678         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 679 
 680         usleep_range(100, 200);
 681 
 682         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 683         value |= SSPX_ELPG_CLAMP_EN(index);
 684         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 685 
 686         usleep_range(250, 350);
 687 
 688         value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 689         value |= SSPX_ELPG_VCORE_DOWN(index);
 690         padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 691 
 692         mutex_unlock(&padctl->lock);
 693 
 694         return 0;
 695 }
 696 
 697 static int tegra186_usb3_phy_init(struct phy *phy)
 698 {
 699         return 0;
 700 }
 701 
 702 static int tegra186_usb3_phy_exit(struct phy *phy)
 703 {
 704         return 0;
 705 }
 706 
 707 static const struct phy_ops usb3_phy_ops = {
 708         .init = tegra186_usb3_phy_init,
 709         .exit = tegra186_usb3_phy_exit,
 710         .power_on = tegra186_usb3_phy_power_on,
 711         .power_off = tegra186_usb3_phy_power_off,
 712         .owner = THIS_MODULE,
 713 };
 714 
 715 static struct tegra_xusb_pad *
 716 tegra186_usb3_pad_probe(struct tegra_xusb_padctl *padctl,
 717                         const struct tegra_xusb_pad_soc *soc,
 718                         struct device_node *np)
 719 {
 720         struct tegra_xusb_usb3_pad *usb3;
 721         struct tegra_xusb_pad *pad;
 722         int err;
 723 
 724         usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
 725         if (!usb3)
 726                 return ERR_PTR(-ENOMEM);
 727 
 728         pad = &usb3->base;
 729         pad->ops = &tegra186_usb3_lane_ops;
 730         pad->soc = soc;
 731 
 732         err = tegra_xusb_pad_init(pad, padctl, np);
 733         if (err < 0) {
 734                 kfree(usb3);
 735                 goto out;
 736         }
 737 
 738         err = tegra_xusb_pad_register(pad, &usb3_phy_ops);
 739         if (err < 0)
 740                 goto unregister;
 741 
 742         dev_set_drvdata(&pad->dev, pad);
 743 
 744         return pad;
 745 
 746 unregister:
 747         device_unregister(&pad->dev);
 748 out:
 749         return ERR_PTR(err);
 750 }
 751 
 752 static void tegra186_usb3_pad_remove(struct tegra_xusb_pad *pad)
 753 {
 754         struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
 755 
 756         kfree(usb2);
 757 }
 758 
 759 static const struct tegra_xusb_pad_ops tegra186_usb3_pad_ops = {
 760         .probe = tegra186_usb3_pad_probe,
 761         .remove = tegra186_usb3_pad_remove,
 762 };
 763 
 764 static const char * const tegra186_usb3_functions[] = {
 765         "xusb",
 766 };
 767 
 768 static const struct tegra_xusb_lane_soc tegra186_usb3_lanes[] = {
 769         TEGRA186_LANE("usb3-0", 0,  0, 0, usb3),
 770         TEGRA186_LANE("usb3-1", 0,  0, 0, usb3),
 771         TEGRA186_LANE("usb3-2", 0,  0, 0, usb3),
 772 };
 773 
 774 static const struct tegra_xusb_pad_soc tegra186_usb3_pad = {
 775         .name = "usb3",
 776         .num_lanes = ARRAY_SIZE(tegra186_usb3_lanes),
 777         .lanes = tegra186_usb3_lanes,
 778         .ops = &tegra186_usb3_pad_ops,
 779 };
 780 
 781 static const struct tegra_xusb_pad_soc * const tegra186_pads[] = {
 782         &tegra186_usb2_pad,
 783         &tegra186_usb3_pad,
 784 #if 0 /* TODO implement */
 785         &tegra186_hsic_pad,
 786 #endif
 787 };
 788 
 789 static int
 790 tegra186_xusb_read_fuse_calibration(struct tegra186_xusb_padctl *padctl)
 791 {
 792         struct device *dev = padctl->base.dev;
 793         unsigned int i, count;
 794         u32 value, *level;
 795         int err;
 796 
 797         count = padctl->base.soc->ports.usb2.count;
 798 
 799         level = devm_kcalloc(dev, count, sizeof(u32), GFP_KERNEL);
 800         if (!level)
 801                 return -ENOMEM;
 802 
 803         err = tegra_fuse_readl(TEGRA_FUSE_SKU_CALIB_0, &value);
 804         if (err) {
 805                 dev_err(dev, "failed to read calibration fuse: %d\n", err);
 806                 return err;
 807         }
 808 
 809         dev_dbg(dev, "FUSE_USB_CALIB_0 %#x\n", value);
 810 
 811         for (i = 0; i < count; i++)
 812                 level[i] = (value >> HS_CURR_LEVEL_PADX_SHIFT(i)) &
 813                                 HS_CURR_LEVEL_PAD_MASK;
 814 
 815         padctl->calib.hs_curr_level = level;
 816 
 817         padctl->calib.hs_squelch = (value >> HS_SQUELCH_SHIFT) &
 818                                         HS_SQUELCH_MASK;
 819         padctl->calib.hs_term_range_adj = (value >> HS_TERM_RANGE_ADJ_SHIFT) &
 820                                                 HS_TERM_RANGE_ADJ_MASK;
 821 
 822         err = tegra_fuse_readl(TEGRA_FUSE_USB_CALIB_EXT_0, &value);
 823         if (err) {
 824                 dev_err(dev, "failed to read calibration fuse: %d\n", err);
 825                 return err;
 826         }
 827 
 828         dev_dbg(dev, "FUSE_USB_CALIB_EXT_0 %#x\n", value);
 829 
 830         padctl->calib.rpd_ctrl = (value >> RPD_CTRL_SHIFT) & RPD_CTRL_MASK;
 831 
 832         return 0;
 833 }
 834 
 835 static struct tegra_xusb_padctl *
 836 tegra186_xusb_padctl_probe(struct device *dev,
 837                            const struct tegra_xusb_padctl_soc *soc)
 838 {
 839         struct tegra186_xusb_padctl *priv;
 840         int err;
 841 
 842         priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
 843         if (!priv)
 844                 return ERR_PTR(-ENOMEM);
 845 
 846         priv->base.dev = dev;
 847         priv->base.soc = soc;
 848 
 849         err = tegra186_xusb_read_fuse_calibration(priv);
 850         if (err < 0)
 851                 return ERR_PTR(err);
 852 
 853         return &priv->base;
 854 }
 855 
 856 static void tegra186_xusb_padctl_remove(struct tegra_xusb_padctl *padctl)
 857 {
 858 }
 859 
 860 static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = {
 861         .probe = tegra186_xusb_padctl_probe,
 862         .remove = tegra186_xusb_padctl_remove,
 863 };
 864 
 865 static const char * const tegra186_xusb_padctl_supply_names[] = {
 866         "avdd-pll-erefeut",
 867         "avdd-usb",
 868         "vclamp-usb",
 869         "vddio-hsic",
 870 };
 871 
 872 const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc = {
 873         .num_pads = ARRAY_SIZE(tegra186_pads),
 874         .pads = tegra186_pads,
 875         .ports = {
 876                 .usb2 = {
 877                         .ops = &tegra186_usb2_port_ops,
 878                         .count = 3,
 879                 },
 880 #if 0 /* TODO implement */
 881                 .hsic = {
 882                         .ops = &tegra186_hsic_port_ops,
 883                         .count = 1,
 884                 },
 885 #endif
 886                 .usb3 = {
 887                         .ops = &tegra186_usb3_port_ops,
 888                         .count = 3,
 889                 },
 890         },
 891         .ops = &tegra186_xusb_padctl_ops,
 892         .supply_names = tegra186_xusb_padctl_supply_names,
 893         .num_supplies = ARRAY_SIZE(tegra186_xusb_padctl_supply_names),
 894 };
 895 EXPORT_SYMBOL_GPL(tegra186_xusb_padctl_soc);
 896 
 897 MODULE_AUTHOR("JC Kuo <jckuo@nvidia.com>");
 898 MODULE_DESCRIPTION("NVIDIA Tegra186 XUSB Pad Controller driver");
 899 MODULE_LICENSE("GPL v2");

/* [<][>][^][v][top][bottom][index][help] */