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 int tegra186_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl, 861 bool status) 862 { 863 u32 value; 864 865 dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear"); 866 867 value = padctl_readl(padctl, USB2_VBUS_ID); 868 869 if (status) { 870 value |= VBUS_OVERRIDE; 871 value &= ~ID_OVERRIDE(~0); 872 value |= ID_OVERRIDE_FLOATING; 873 } else { 874 value &= ~VBUS_OVERRIDE; 875 } 876 877 padctl_writel(padctl, value, USB2_VBUS_ID); 878 879 return 0; 880 } 881 882 static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = { 883 .probe = tegra186_xusb_padctl_probe, 884 .remove = tegra186_xusb_padctl_remove, 885 .vbus_override = tegra186_xusb_padctl_vbus_override, 886 }; 887 888 static const char * const tegra186_xusb_padctl_supply_names[] = { 889 "avdd-pll-erefeut", 890 "avdd-usb", 891 "vclamp-usb", 892 "vddio-hsic", 893 }; 894 895 const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc = { 896 .num_pads = ARRAY_SIZE(tegra186_pads), 897 .pads = tegra186_pads, 898 .ports = { 899 .usb2 = { 900 .ops = &tegra186_usb2_port_ops, 901 .count = 3, 902 }, 903 #if 0 /* TODO implement */ 904 .hsic = { 905 .ops = &tegra186_hsic_port_ops, 906 .count = 1, 907 }, 908 #endif 909 .usb3 = { 910 .ops = &tegra186_usb3_port_ops, 911 .count = 3, 912 }, 913 }, 914 .ops = &tegra186_xusb_padctl_ops, 915 .supply_names = tegra186_xusb_padctl_supply_names, 916 .num_supplies = ARRAY_SIZE(tegra186_xusb_padctl_supply_names), 917 }; 918 EXPORT_SYMBOL_GPL(tegra186_xusb_padctl_soc); 919 920 MODULE_AUTHOR("JC Kuo <jckuo@nvidia.com>"); 921 MODULE_DESCRIPTION("NVIDIA Tegra186 XUSB Pad Controller driver"); 922 MODULE_LICENSE("GPL v2"); 923