linux/drivers/phy/tegra/xusb-tegra186.c
<<
>>
Prefs
   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#define XUSB_PADCTL_SS_PORT_CFG                 0x2c
  67#define   PORTX_SPEED_SUPPORT_SHIFT(x)          ((x) * 4)
  68#define   PORTX_SPEED_SUPPORT_MASK              (0x3)
  69#define     PORT_SPEED_SUPPORT_GEN1             (0x0)
  70
  71#define XUSB_PADCTL_USB2_OTG_PADX_CTL0(x)       (0x88 + (x) * 0x40)
  72#define  HS_CURR_LEVEL(x)                       ((x) & 0x3f)
  73#define  TERM_SEL                               BIT(25)
  74#define  USB2_OTG_PD                            BIT(26)
  75#define  USB2_OTG_PD2                           BIT(27)
  76#define  USB2_OTG_PD2_OVRD_EN                   BIT(28)
  77#define  USB2_OTG_PD_ZI                         BIT(29)
  78
  79#define XUSB_PADCTL_USB2_OTG_PADX_CTL1(x)       (0x8c + (x) * 0x40)
  80#define  USB2_OTG_PD_DR                         BIT(2)
  81#define  TERM_RANGE_ADJ(x)                      (((x) & 0xf) << 3)
  82#define  RPD_CTRL(x)                            (((x) & 0x1f) << 26)
  83
  84#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0          0x284
  85#define  BIAS_PAD_PD                            BIT(11)
  86#define  HS_SQUELCH_LEVEL(x)                    (((x) & 0x7) << 0)
  87
  88#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1          0x288
  89#define  USB2_TRK_START_TIMER(x)                (((x) & 0x7f) << 12)
  90#define  USB2_TRK_DONE_RESET_TIMER(x)           (((x) & 0x7f) << 19)
  91#define  USB2_PD_TRK                            BIT(26)
  92
  93#define XUSB_PADCTL_HSIC_PADX_CTL0(x)           (0x300 + (x) * 0x20)
  94#define  HSIC_PD_TX_DATA0                       BIT(1)
  95#define  HSIC_PD_TX_STROBE                      BIT(3)
  96#define  HSIC_PD_RX_DATA0                       BIT(4)
  97#define  HSIC_PD_RX_STROBE                      BIT(6)
  98#define  HSIC_PD_ZI_DATA0                       BIT(7)
  99#define  HSIC_PD_ZI_STROBE                      BIT(9)
 100#define  HSIC_RPD_DATA0                         BIT(13)
 101#define  HSIC_RPD_STROBE                        BIT(15)
 102#define  HSIC_RPU_DATA0                         BIT(16)
 103#define  HSIC_RPU_STROBE                        BIT(18)
 104
 105#define XUSB_PADCTL_HSIC_PAD_TRK_CTL0           0x340
 106#define  HSIC_TRK_START_TIMER(x)                (((x) & 0x7f) << 5)
 107#define  HSIC_TRK_DONE_RESET_TIMER(x)           (((x) & 0x7f) << 12)
 108#define  HSIC_PD_TRK                            BIT(19)
 109
 110#define USB2_VBUS_ID                            0x360
 111#define  VBUS_OVERRIDE                          BIT(14)
 112#define  ID_OVERRIDE(x)                         (((x) & 0xf) << 18)
 113#define  ID_OVERRIDE_FLOATING                   ID_OVERRIDE(8)
 114#define  ID_OVERRIDE_GROUNDED                   ID_OVERRIDE(0)
 115
 116#define TEGRA186_LANE(_name, _offset, _shift, _mask, _type)             \
 117        {                                                               \
 118                .name = _name,                                          \
 119                .offset = _offset,                                      \
 120                .shift = _shift,                                        \
 121                .mask = _mask,                                          \
 122                .num_funcs = ARRAY_SIZE(tegra186_##_type##_functions),  \
 123                .funcs = tegra186_##_type##_functions,                  \
 124        }
 125
 126struct tegra_xusb_fuse_calibration {
 127        u32 *hs_curr_level;
 128        u32 hs_squelch;
 129        u32 hs_term_range_adj;
 130        u32 rpd_ctrl;
 131};
 132
 133struct tegra186_xusb_padctl {
 134        struct tegra_xusb_padctl base;
 135
 136        struct tegra_xusb_fuse_calibration calib;
 137
 138        /* UTMI bias and tracking */
 139        struct clk *usb2_trk_clk;
 140        unsigned int bias_pad_enable;
 141};
 142
 143static inline struct tegra186_xusb_padctl *
 144to_tegra186_xusb_padctl(struct tegra_xusb_padctl *padctl)
 145{
 146        return container_of(padctl, struct tegra186_xusb_padctl, base);
 147}
 148
 149/* USB 2.0 UTMI PHY support */
 150static struct tegra_xusb_lane *
 151tegra186_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 152                         unsigned int index)
 153{
 154        struct tegra_xusb_usb2_lane *usb2;
 155        int err;
 156
 157        usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
 158        if (!usb2)
 159                return ERR_PTR(-ENOMEM);
 160
 161        INIT_LIST_HEAD(&usb2->base.list);
 162        usb2->base.soc = &pad->soc->lanes[index];
 163        usb2->base.index = index;
 164        usb2->base.pad = pad;
 165        usb2->base.np = np;
 166
 167        err = tegra_xusb_lane_parse_dt(&usb2->base, np);
 168        if (err < 0) {
 169                kfree(usb2);
 170                return ERR_PTR(err);
 171        }
 172
 173        return &usb2->base;
 174}
 175
 176static void tegra186_usb2_lane_remove(struct tegra_xusb_lane *lane)
 177{
 178        struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
 179
 180        kfree(usb2);
 181}
 182
 183static const struct tegra_xusb_lane_ops tegra186_usb2_lane_ops = {
 184        .probe = tegra186_usb2_lane_probe,
 185        .remove = tegra186_usb2_lane_remove,
 186};
 187
 188static void tegra186_utmi_bias_pad_power_on(struct tegra_xusb_padctl *padctl)
 189{
 190        struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 191        struct device *dev = padctl->dev;
 192        u32 value;
 193        int err;
 194
 195        mutex_lock(&padctl->lock);
 196
 197        if (priv->bias_pad_enable++ > 0) {
 198                mutex_unlock(&padctl->lock);
 199                return;
 200        }
 201
 202        err = clk_prepare_enable(priv->usb2_trk_clk);
 203        if (err < 0)
 204                dev_warn(dev, "failed to enable USB2 trk clock: %d\n", err);
 205
 206        value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 207        value &= ~USB2_TRK_START_TIMER(~0);
 208        value |= USB2_TRK_START_TIMER(0x1e);
 209        value &= ~USB2_TRK_DONE_RESET_TIMER(~0);
 210        value |= USB2_TRK_DONE_RESET_TIMER(0xa);
 211        padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 212
 213        value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
 214        value &= ~BIAS_PAD_PD;
 215        value &= ~HS_SQUELCH_LEVEL(~0);
 216        value |= HS_SQUELCH_LEVEL(priv->calib.hs_squelch);
 217        padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
 218
 219        udelay(1);
 220
 221        value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 222        value &= ~USB2_PD_TRK;
 223        padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 224
 225        mutex_unlock(&padctl->lock);
 226}
 227
 228static void tegra186_utmi_bias_pad_power_off(struct tegra_xusb_padctl *padctl)
 229{
 230        struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 231        u32 value;
 232
 233        mutex_lock(&padctl->lock);
 234
 235        if (WARN_ON(priv->bias_pad_enable == 0)) {
 236                mutex_unlock(&padctl->lock);
 237                return;
 238        }
 239
 240        if (--priv->bias_pad_enable > 0) {
 241                mutex_unlock(&padctl->lock);
 242                return;
 243        }
 244
 245        value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 246        value |= USB2_PD_TRK;
 247        padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
 248
 249        clk_disable_unprepare(priv->usb2_trk_clk);
 250
 251        mutex_unlock(&padctl->lock);
 252}
 253
 254static void tegra_phy_xusb_utmi_pad_power_on(struct phy *phy)
 255{
 256        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 257        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 258        struct tegra_xusb_usb2_port *port;
 259        struct device *dev = padctl->dev;
 260        unsigned int index = lane->index;
 261        u32 value;
 262
 263        if (!phy)
 264                return;
 265
 266        port = tegra_xusb_find_usb2_port(padctl, index);
 267        if (!port) {
 268                dev_err(dev, "no port found for USB2 lane %u\n", index);
 269                return;
 270        }
 271
 272        tegra186_utmi_bias_pad_power_on(padctl);
 273
 274        udelay(2);
 275
 276        value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 277        value &= ~USB2_OTG_PD;
 278        padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 279
 280        value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 281        value &= ~USB2_OTG_PD_DR;
 282        padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 283}
 284
 285static void tegra_phy_xusb_utmi_pad_power_down(struct phy *phy)
 286{
 287        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 288        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 289        unsigned int index = lane->index;
 290        u32 value;
 291
 292        if (!phy)
 293                return;
 294
 295        value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 296        value |= USB2_OTG_PD;
 297        padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 298
 299        value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 300        value |= USB2_OTG_PD_DR;
 301        padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 302
 303        udelay(2);
 304
 305        tegra186_utmi_bias_pad_power_off(padctl);
 306}
 307
 308static int tegra186_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl,
 309                                               bool status)
 310{
 311        u32 value;
 312
 313        dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear");
 314
 315        value = padctl_readl(padctl, USB2_VBUS_ID);
 316
 317        if (status) {
 318                value |= VBUS_OVERRIDE;
 319                value &= ~ID_OVERRIDE(~0);
 320                value |= ID_OVERRIDE_FLOATING;
 321        } else {
 322                value &= ~VBUS_OVERRIDE;
 323        }
 324
 325        padctl_writel(padctl, value, USB2_VBUS_ID);
 326
 327        return 0;
 328}
 329
 330static int tegra186_xusb_padctl_id_override(struct tegra_xusb_padctl *padctl,
 331                                            bool status)
 332{
 333        u32 value;
 334
 335        dev_dbg(padctl->dev, "%s id override\n", status ? "set" : "clear");
 336
 337        value = padctl_readl(padctl, USB2_VBUS_ID);
 338
 339        if (status) {
 340                if (value & VBUS_OVERRIDE) {
 341                        value &= ~VBUS_OVERRIDE;
 342                        padctl_writel(padctl, value, USB2_VBUS_ID);
 343                        usleep_range(1000, 2000);
 344
 345                        value = padctl_readl(padctl, USB2_VBUS_ID);
 346                }
 347
 348                value &= ~ID_OVERRIDE(~0);
 349                value |= ID_OVERRIDE_GROUNDED;
 350        } else {
 351                value &= ~ID_OVERRIDE(~0);
 352                value |= ID_OVERRIDE_FLOATING;
 353        }
 354
 355        padctl_writel(padctl, value, USB2_VBUS_ID);
 356
 357        return 0;
 358}
 359
 360static int tegra186_utmi_phy_set_mode(struct phy *phy, enum phy_mode mode,
 361                                      int submode)
 362{
 363        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 364        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 365        struct tegra_xusb_usb2_port *port = tegra_xusb_find_usb2_port(padctl,
 366                                                                lane->index);
 367        int err = 0;
 368
 369        mutex_lock(&padctl->lock);
 370
 371        dev_dbg(&port->base.dev, "%s: mode %d", __func__, mode);
 372
 373        if (mode == PHY_MODE_USB_OTG) {
 374                if (submode == USB_ROLE_HOST) {
 375                        tegra186_xusb_padctl_id_override(padctl, true);
 376
 377                        err = regulator_enable(port->supply);
 378                } else if (submode == USB_ROLE_DEVICE) {
 379                        tegra186_xusb_padctl_vbus_override(padctl, true);
 380                } else if (submode == USB_ROLE_NONE) {
 381                        /*
 382                         * When port is peripheral only or role transitions to
 383                         * USB_ROLE_NONE from USB_ROLE_DEVICE, regulator is not
 384                         * enabled.
 385                         */
 386                        if (regulator_is_enabled(port->supply))
 387                                regulator_disable(port->supply);
 388
 389                        tegra186_xusb_padctl_id_override(padctl, false);
 390                        tegra186_xusb_padctl_vbus_override(padctl, false);
 391                }
 392        }
 393
 394        mutex_unlock(&padctl->lock);
 395
 396        return err;
 397}
 398
 399static int tegra186_utmi_phy_power_on(struct phy *phy)
 400{
 401        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 402        struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
 403        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 404        struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 405        struct tegra_xusb_usb2_port *port;
 406        unsigned int index = lane->index;
 407        struct device *dev = padctl->dev;
 408        u32 value;
 409
 410        port = tegra_xusb_find_usb2_port(padctl, index);
 411        if (!port) {
 412                dev_err(dev, "no port found for USB2 lane %u\n", index);
 413                return -ENODEV;
 414        }
 415
 416        value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
 417        value &= ~(USB2_PORT_MASK << USB2_PORT_SHIFT(index));
 418        value |= (PORT_XUSB << USB2_PORT_SHIFT(index));
 419        padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
 420
 421        value = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
 422        value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index));
 423
 424        if (port->mode == USB_DR_MODE_UNKNOWN)
 425                value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index));
 426        else if (port->mode == USB_DR_MODE_PERIPHERAL)
 427                value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index));
 428        else if (port->mode == USB_DR_MODE_HOST)
 429                value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index));
 430        else if (port->mode == USB_DR_MODE_OTG)
 431                value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index));
 432
 433        padctl_writel(padctl, value, XUSB_PADCTL_USB2_PORT_CAP);
 434
 435        value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 436        value &= ~USB2_OTG_PD_ZI;
 437        value |= TERM_SEL;
 438        value &= ~HS_CURR_LEVEL(~0);
 439
 440        if (usb2->hs_curr_level_offset) {
 441                int hs_current_level;
 442
 443                hs_current_level = (int)priv->calib.hs_curr_level[index] +
 444                                                usb2->hs_curr_level_offset;
 445
 446                if (hs_current_level < 0)
 447                        hs_current_level = 0;
 448                if (hs_current_level > 0x3f)
 449                        hs_current_level = 0x3f;
 450
 451                value |= HS_CURR_LEVEL(hs_current_level);
 452        } else {
 453                value |= HS_CURR_LEVEL(priv->calib.hs_curr_level[index]);
 454        }
 455
 456        padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
 457
 458        value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 459        value &= ~TERM_RANGE_ADJ(~0);
 460        value |= TERM_RANGE_ADJ(priv->calib.hs_term_range_adj);
 461        value &= ~RPD_CTRL(~0);
 462        value |= RPD_CTRL(priv->calib.rpd_ctrl);
 463        padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
 464
 465        /* TODO: pad power saving */
 466        tegra_phy_xusb_utmi_pad_power_on(phy);
 467        return 0;
 468}
 469
 470static int tegra186_utmi_phy_power_off(struct phy *phy)
 471{
 472        /* TODO: pad power saving */
 473        tegra_phy_xusb_utmi_pad_power_down(phy);
 474
 475        return 0;
 476}
 477
 478static int tegra186_utmi_phy_init(struct phy *phy)
 479{
 480        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 481        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 482        struct tegra_xusb_usb2_port *port;
 483        unsigned int index = lane->index;
 484        struct device *dev = padctl->dev;
 485        int err;
 486
 487        port = tegra_xusb_find_usb2_port(padctl, index);
 488        if (!port) {
 489                dev_err(dev, "no port found for USB2 lane %u\n", index);
 490                return -ENODEV;
 491        }
 492
 493        if (port->supply && port->mode == USB_DR_MODE_HOST) {
 494                err = regulator_enable(port->supply);
 495                if (err) {
 496                        dev_err(dev, "failed to enable port %u VBUS: %d\n",
 497                                index, err);
 498                        return err;
 499                }
 500        }
 501
 502        return 0;
 503}
 504
 505static int tegra186_utmi_phy_exit(struct phy *phy)
 506{
 507        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 508        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 509        struct tegra_xusb_usb2_port *port;
 510        unsigned int index = lane->index;
 511        struct device *dev = padctl->dev;
 512        int err;
 513
 514        port = tegra_xusb_find_usb2_port(padctl, index);
 515        if (!port) {
 516                dev_err(dev, "no port found for USB2 lane %u\n", index);
 517                return -ENODEV;
 518        }
 519
 520        if (port->supply && port->mode == USB_DR_MODE_HOST) {
 521                err = regulator_disable(port->supply);
 522                if (err) {
 523                        dev_err(dev, "failed to disable port %u VBUS: %d\n",
 524                                index, err);
 525                        return err;
 526                }
 527        }
 528
 529        return 0;
 530}
 531
 532static const struct phy_ops utmi_phy_ops = {
 533        .init = tegra186_utmi_phy_init,
 534        .exit = tegra186_utmi_phy_exit,
 535        .power_on = tegra186_utmi_phy_power_on,
 536        .power_off = tegra186_utmi_phy_power_off,
 537        .set_mode = tegra186_utmi_phy_set_mode,
 538        .owner = THIS_MODULE,
 539};
 540
 541static struct tegra_xusb_pad *
 542tegra186_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
 543                        const struct tegra_xusb_pad_soc *soc,
 544                        struct device_node *np)
 545{
 546        struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
 547        struct tegra_xusb_usb2_pad *usb2;
 548        struct tegra_xusb_pad *pad;
 549        int err;
 550
 551        usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
 552        if (!usb2)
 553                return ERR_PTR(-ENOMEM);
 554
 555        pad = &usb2->base;
 556        pad->ops = &tegra186_usb2_lane_ops;
 557        pad->soc = soc;
 558
 559        err = tegra_xusb_pad_init(pad, padctl, np);
 560        if (err < 0) {
 561                kfree(usb2);
 562                goto out;
 563        }
 564
 565        priv->usb2_trk_clk = devm_clk_get(&pad->dev, "trk");
 566        if (IS_ERR(priv->usb2_trk_clk)) {
 567                err = PTR_ERR(priv->usb2_trk_clk);
 568                dev_dbg(&pad->dev, "failed to get usb2 trk clock: %d\n", err);
 569                goto unregister;
 570        }
 571
 572        err = tegra_xusb_pad_register(pad, &utmi_phy_ops);
 573        if (err < 0)
 574                goto unregister;
 575
 576        dev_set_drvdata(&pad->dev, pad);
 577
 578        return pad;
 579
 580unregister:
 581        device_unregister(&pad->dev);
 582out:
 583        return ERR_PTR(err);
 584}
 585
 586static void tegra186_usb2_pad_remove(struct tegra_xusb_pad *pad)
 587{
 588        struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
 589
 590        kfree(usb2);
 591}
 592
 593static const struct tegra_xusb_pad_ops tegra186_usb2_pad_ops = {
 594        .probe = tegra186_usb2_pad_probe,
 595        .remove = tegra186_usb2_pad_remove,
 596};
 597
 598static const char * const tegra186_usb2_functions[] = {
 599        "xusb",
 600};
 601
 602static int tegra186_usb2_port_enable(struct tegra_xusb_port *port)
 603{
 604        return 0;
 605}
 606
 607static void tegra186_usb2_port_disable(struct tegra_xusb_port *port)
 608{
 609}
 610
 611static struct tegra_xusb_lane *
 612tegra186_usb2_port_map(struct tegra_xusb_port *port)
 613{
 614        return tegra_xusb_find_lane(port->padctl, "usb2", port->index);
 615}
 616
 617static const struct tegra_xusb_port_ops tegra186_usb2_port_ops = {
 618        .release = tegra_xusb_usb2_port_release,
 619        .remove = tegra_xusb_usb2_port_remove,
 620        .enable = tegra186_usb2_port_enable,
 621        .disable = tegra186_usb2_port_disable,
 622        .map = tegra186_usb2_port_map,
 623};
 624
 625/* SuperSpeed PHY support */
 626static struct tegra_xusb_lane *
 627tegra186_usb3_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
 628                         unsigned int index)
 629{
 630        struct tegra_xusb_usb3_lane *usb3;
 631        int err;
 632
 633        usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
 634        if (!usb3)
 635                return ERR_PTR(-ENOMEM);
 636
 637        INIT_LIST_HEAD(&usb3->base.list);
 638        usb3->base.soc = &pad->soc->lanes[index];
 639        usb3->base.index = index;
 640        usb3->base.pad = pad;
 641        usb3->base.np = np;
 642
 643        err = tegra_xusb_lane_parse_dt(&usb3->base, np);
 644        if (err < 0) {
 645                kfree(usb3);
 646                return ERR_PTR(err);
 647        }
 648
 649        return &usb3->base;
 650}
 651
 652static void tegra186_usb3_lane_remove(struct tegra_xusb_lane *lane)
 653{
 654        struct tegra_xusb_usb3_lane *usb3 = to_usb3_lane(lane);
 655
 656        kfree(usb3);
 657}
 658
 659static const struct tegra_xusb_lane_ops tegra186_usb3_lane_ops = {
 660        .probe = tegra186_usb3_lane_probe,
 661        .remove = tegra186_usb3_lane_remove,
 662};
 663static int tegra186_usb3_port_enable(struct tegra_xusb_port *port)
 664{
 665        return 0;
 666}
 667
 668static void tegra186_usb3_port_disable(struct tegra_xusb_port *port)
 669{
 670}
 671
 672static struct tegra_xusb_lane *
 673tegra186_usb3_port_map(struct tegra_xusb_port *port)
 674{
 675        return tegra_xusb_find_lane(port->padctl, "usb3", port->index);
 676}
 677
 678static const struct tegra_xusb_port_ops tegra186_usb3_port_ops = {
 679        .release = tegra_xusb_usb3_port_release,
 680        .remove = tegra_xusb_usb3_port_remove,
 681        .enable = tegra186_usb3_port_enable,
 682        .disable = tegra186_usb3_port_disable,
 683        .map = tegra186_usb3_port_map,
 684};
 685
 686static int tegra186_usb3_phy_power_on(struct phy *phy)
 687{
 688        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 689        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 690        struct tegra_xusb_usb3_port *port;
 691        struct tegra_xusb_usb2_port *usb2;
 692        unsigned int index = lane->index;
 693        struct device *dev = padctl->dev;
 694        u32 value;
 695
 696        port = tegra_xusb_find_usb3_port(padctl, index);
 697        if (!port) {
 698                dev_err(dev, "no port found for USB3 lane %u\n", index);
 699                return -ENODEV;
 700        }
 701
 702        usb2 = tegra_xusb_find_usb2_port(padctl, port->port);
 703        if (!usb2) {
 704                dev_err(dev, "no companion port found for USB3 lane %u\n",
 705                        index);
 706                return -ENODEV;
 707        }
 708
 709        mutex_lock(&padctl->lock);
 710
 711        value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CAP);
 712        value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index));
 713
 714        if (usb2->mode == USB_DR_MODE_UNKNOWN)
 715                value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index));
 716        else if (usb2->mode == USB_DR_MODE_PERIPHERAL)
 717                value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index));
 718        else if (usb2->mode == USB_DR_MODE_HOST)
 719                value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index));
 720        else if (usb2->mode == USB_DR_MODE_OTG)
 721                value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index));
 722
 723        padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CAP);
 724
 725        if (padctl->soc->supports_gen2 && port->disable_gen2) {
 726                value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CFG);
 727                value &= ~(PORTX_SPEED_SUPPORT_MASK <<
 728                        PORTX_SPEED_SUPPORT_SHIFT(index));
 729                value |= (PORT_SPEED_SUPPORT_GEN1 <<
 730                        PORTX_SPEED_SUPPORT_SHIFT(index));
 731                padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CFG);
 732        }
 733
 734        value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 735        value &= ~SSPX_ELPG_VCORE_DOWN(index);
 736        padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 737
 738        usleep_range(100, 200);
 739
 740        value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 741        value &= ~SSPX_ELPG_CLAMP_EN_EARLY(index);
 742        padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 743
 744        usleep_range(100, 200);
 745
 746        value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 747        value &= ~SSPX_ELPG_CLAMP_EN(index);
 748        padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 749
 750        mutex_unlock(&padctl->lock);
 751
 752        return 0;
 753}
 754
 755static int tegra186_usb3_phy_power_off(struct phy *phy)
 756{
 757        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 758        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 759        struct tegra_xusb_usb3_port *port;
 760        unsigned int index = lane->index;
 761        struct device *dev = padctl->dev;
 762        u32 value;
 763
 764        port = tegra_xusb_find_usb3_port(padctl, index);
 765        if (!port) {
 766                dev_err(dev, "no port found for USB3 lane %u\n", index);
 767                return -ENODEV;
 768        }
 769
 770        mutex_lock(&padctl->lock);
 771
 772        value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 773        value |= SSPX_ELPG_CLAMP_EN_EARLY(index);
 774        padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 775
 776        usleep_range(100, 200);
 777
 778        value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 779        value |= SSPX_ELPG_CLAMP_EN(index);
 780        padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 781
 782        usleep_range(250, 350);
 783
 784        value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
 785        value |= SSPX_ELPG_VCORE_DOWN(index);
 786        padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
 787
 788        mutex_unlock(&padctl->lock);
 789
 790        return 0;
 791}
 792
 793static int tegra186_usb3_phy_init(struct phy *phy)
 794{
 795        return 0;
 796}
 797
 798static int tegra186_usb3_phy_exit(struct phy *phy)
 799{
 800        return 0;
 801}
 802
 803static const struct phy_ops usb3_phy_ops = {
 804        .init = tegra186_usb3_phy_init,
 805        .exit = tegra186_usb3_phy_exit,
 806        .power_on = tegra186_usb3_phy_power_on,
 807        .power_off = tegra186_usb3_phy_power_off,
 808        .owner = THIS_MODULE,
 809};
 810
 811static struct tegra_xusb_pad *
 812tegra186_usb3_pad_probe(struct tegra_xusb_padctl *padctl,
 813                        const struct tegra_xusb_pad_soc *soc,
 814                        struct device_node *np)
 815{
 816        struct tegra_xusb_usb3_pad *usb3;
 817        struct tegra_xusb_pad *pad;
 818        int err;
 819
 820        usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
 821        if (!usb3)
 822                return ERR_PTR(-ENOMEM);
 823
 824        pad = &usb3->base;
 825        pad->ops = &tegra186_usb3_lane_ops;
 826        pad->soc = soc;
 827
 828        err = tegra_xusb_pad_init(pad, padctl, np);
 829        if (err < 0) {
 830                kfree(usb3);
 831                goto out;
 832        }
 833
 834        err = tegra_xusb_pad_register(pad, &usb3_phy_ops);
 835        if (err < 0)
 836                goto unregister;
 837
 838        dev_set_drvdata(&pad->dev, pad);
 839
 840        return pad;
 841
 842unregister:
 843        device_unregister(&pad->dev);
 844out:
 845        return ERR_PTR(err);
 846}
 847
 848static void tegra186_usb3_pad_remove(struct tegra_xusb_pad *pad)
 849{
 850        struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
 851
 852        kfree(usb2);
 853}
 854
 855static const struct tegra_xusb_pad_ops tegra186_usb3_pad_ops = {
 856        .probe = tegra186_usb3_pad_probe,
 857        .remove = tegra186_usb3_pad_remove,
 858};
 859
 860static const char * const tegra186_usb3_functions[] = {
 861        "xusb",
 862};
 863
 864static int
 865tegra186_xusb_read_fuse_calibration(struct tegra186_xusb_padctl *padctl)
 866{
 867        struct device *dev = padctl->base.dev;
 868        unsigned int i, count;
 869        u32 value, *level;
 870        int err;
 871
 872        count = padctl->base.soc->ports.usb2.count;
 873
 874        level = devm_kcalloc(dev, count, sizeof(u32), GFP_KERNEL);
 875        if (!level)
 876                return -ENOMEM;
 877
 878        err = tegra_fuse_readl(TEGRA_FUSE_SKU_CALIB_0, &value);
 879        if (err) {
 880                if (err != -EPROBE_DEFER)
 881                        dev_err(dev, "failed to read calibration fuse: %d\n",
 882                                err);
 883                return err;
 884        }
 885
 886        dev_dbg(dev, "FUSE_USB_CALIB_0 %#x\n", value);
 887
 888        for (i = 0; i < count; i++)
 889                level[i] = (value >> HS_CURR_LEVEL_PADX_SHIFT(i)) &
 890                                HS_CURR_LEVEL_PAD_MASK;
 891
 892        padctl->calib.hs_curr_level = level;
 893
 894        padctl->calib.hs_squelch = (value >> HS_SQUELCH_SHIFT) &
 895                                        HS_SQUELCH_MASK;
 896        padctl->calib.hs_term_range_adj = (value >> HS_TERM_RANGE_ADJ_SHIFT) &
 897                                                HS_TERM_RANGE_ADJ_MASK;
 898
 899        err = tegra_fuse_readl(TEGRA_FUSE_USB_CALIB_EXT_0, &value);
 900        if (err) {
 901                dev_err(dev, "failed to read calibration fuse: %d\n", err);
 902                return err;
 903        }
 904
 905        dev_dbg(dev, "FUSE_USB_CALIB_EXT_0 %#x\n", value);
 906
 907        padctl->calib.rpd_ctrl = (value >> RPD_CTRL_SHIFT) & RPD_CTRL_MASK;
 908
 909        return 0;
 910}
 911
 912static struct tegra_xusb_padctl *
 913tegra186_xusb_padctl_probe(struct device *dev,
 914                           const struct tegra_xusb_padctl_soc *soc)
 915{
 916        struct tegra186_xusb_padctl *priv;
 917        int err;
 918
 919        priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
 920        if (!priv)
 921                return ERR_PTR(-ENOMEM);
 922
 923        priv->base.dev = dev;
 924        priv->base.soc = soc;
 925
 926        err = tegra186_xusb_read_fuse_calibration(priv);
 927        if (err < 0)
 928                return ERR_PTR(err);
 929
 930        return &priv->base;
 931}
 932
 933static void tegra186_xusb_padctl_remove(struct tegra_xusb_padctl *padctl)
 934{
 935}
 936
 937static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = {
 938        .probe = tegra186_xusb_padctl_probe,
 939        .remove = tegra186_xusb_padctl_remove,
 940        .vbus_override = tegra186_xusb_padctl_vbus_override,
 941};
 942
 943#if IS_ENABLED(CONFIG_ARCH_TEGRA_186_SOC)
 944static const char * const tegra186_xusb_padctl_supply_names[] = {
 945        "avdd-pll-erefeut",
 946        "avdd-usb",
 947        "vclamp-usb",
 948        "vddio-hsic",
 949};
 950
 951static const struct tegra_xusb_lane_soc tegra186_usb2_lanes[] = {
 952        TEGRA186_LANE("usb2-0", 0,  0, 0, usb2),
 953        TEGRA186_LANE("usb2-1", 0,  0, 0, usb2),
 954        TEGRA186_LANE("usb2-2", 0,  0, 0, usb2),
 955};
 956
 957static const struct tegra_xusb_pad_soc tegra186_usb2_pad = {
 958        .name = "usb2",
 959        .num_lanes = ARRAY_SIZE(tegra186_usb2_lanes),
 960        .lanes = tegra186_usb2_lanes,
 961        .ops = &tegra186_usb2_pad_ops,
 962};
 963
 964static const struct tegra_xusb_lane_soc tegra186_usb3_lanes[] = {
 965        TEGRA186_LANE("usb3-0", 0,  0, 0, usb3),
 966        TEGRA186_LANE("usb3-1", 0,  0, 0, usb3),
 967        TEGRA186_LANE("usb3-2", 0,  0, 0, usb3),
 968};
 969
 970static const struct tegra_xusb_pad_soc tegra186_usb3_pad = {
 971        .name = "usb3",
 972        .num_lanes = ARRAY_SIZE(tegra186_usb3_lanes),
 973        .lanes = tegra186_usb3_lanes,
 974        .ops = &tegra186_usb3_pad_ops,
 975};
 976
 977static const struct tegra_xusb_pad_soc * const tegra186_pads[] = {
 978        &tegra186_usb2_pad,
 979        &tegra186_usb3_pad,
 980#if 0 /* TODO implement */
 981        &tegra186_hsic_pad,
 982#endif
 983};
 984
 985const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc = {
 986        .num_pads = ARRAY_SIZE(tegra186_pads),
 987        .pads = tegra186_pads,
 988        .ports = {
 989                .usb2 = {
 990                        .ops = &tegra186_usb2_port_ops,
 991                        .count = 3,
 992                },
 993#if 0 /* TODO implement */
 994                .hsic = {
 995                        .ops = &tegra186_hsic_port_ops,
 996                        .count = 1,
 997                },
 998#endif
 999                .usb3 = {
1000                        .ops = &tegra186_usb3_port_ops,
1001                        .count = 3,
1002                },
1003        },
1004        .ops = &tegra186_xusb_padctl_ops,
1005        .supply_names = tegra186_xusb_padctl_supply_names,
1006        .num_supplies = ARRAY_SIZE(tegra186_xusb_padctl_supply_names),
1007};
1008EXPORT_SYMBOL_GPL(tegra186_xusb_padctl_soc);
1009#endif
1010
1011#if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC)
1012static const char * const tegra194_xusb_padctl_supply_names[] = {
1013        "avdd-usb",
1014        "vclamp-usb",
1015};
1016
1017static const struct tegra_xusb_lane_soc tegra194_usb2_lanes[] = {
1018        TEGRA186_LANE("usb2-0", 0,  0, 0, usb2),
1019        TEGRA186_LANE("usb2-1", 0,  0, 0, usb2),
1020        TEGRA186_LANE("usb2-2", 0,  0, 0, usb2),
1021        TEGRA186_LANE("usb2-3", 0,  0, 0, usb2),
1022};
1023
1024static const struct tegra_xusb_pad_soc tegra194_usb2_pad = {
1025        .name = "usb2",
1026        .num_lanes = ARRAY_SIZE(tegra194_usb2_lanes),
1027        .lanes = tegra194_usb2_lanes,
1028        .ops = &tegra186_usb2_pad_ops,
1029};
1030
1031static const struct tegra_xusb_lane_soc tegra194_usb3_lanes[] = {
1032        TEGRA186_LANE("usb3-0", 0,  0, 0, usb3),
1033        TEGRA186_LANE("usb3-1", 0,  0, 0, usb3),
1034        TEGRA186_LANE("usb3-2", 0,  0, 0, usb3),
1035        TEGRA186_LANE("usb3-3", 0,  0, 0, usb3),
1036};
1037
1038static const struct tegra_xusb_pad_soc tegra194_usb3_pad = {
1039        .name = "usb3",
1040        .num_lanes = ARRAY_SIZE(tegra194_usb3_lanes),
1041        .lanes = tegra194_usb3_lanes,
1042        .ops = &tegra186_usb3_pad_ops,
1043};
1044
1045static const struct tegra_xusb_pad_soc * const tegra194_pads[] = {
1046        &tegra194_usb2_pad,
1047        &tegra194_usb3_pad,
1048};
1049
1050const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc = {
1051        .num_pads = ARRAY_SIZE(tegra194_pads),
1052        .pads = tegra194_pads,
1053        .ports = {
1054                .usb2 = {
1055                        .ops = &tegra186_usb2_port_ops,
1056                        .count = 4,
1057                },
1058                .usb3 = {
1059                        .ops = &tegra186_usb3_port_ops,
1060                        .count = 4,
1061                },
1062        },
1063        .ops = &tegra186_xusb_padctl_ops,
1064        .supply_names = tegra194_xusb_padctl_supply_names,
1065        .num_supplies = ARRAY_SIZE(tegra194_xusb_padctl_supply_names),
1066        .supports_gen2 = true,
1067};
1068EXPORT_SYMBOL_GPL(tegra194_xusb_padctl_soc);
1069#endif
1070
1071MODULE_AUTHOR("JC Kuo <jckuo@nvidia.com>");
1072MODULE_DESCRIPTION("NVIDIA Tegra186 XUSB Pad Controller driver");
1073MODULE_LICENSE("GPL v2");
1074