xusb-tegra186.c (44757B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (c) 2016-2020, 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/* XUSB AO registers */ 117#define XUSB_AO_USB_DEBOUNCE_DEL (0x4) 118#define UHSIC_LINE_DEB_CNT(x) (((x) & 0xf) << 4) 119#define UTMIP_LINE_DEB_CNT(x) ((x) & 0xf) 120 121#define XUSB_AO_UTMIP_TRIGGERS(x) (0x40 + (x) * 4) 122#define CLR_WALK_PTR BIT(0) 123#define CAP_CFG BIT(1) 124#define CLR_WAKE_ALARM BIT(3) 125 126#define XUSB_AO_UHSIC_TRIGGERS(x) (0x60 + (x) * 4) 127#define HSIC_CLR_WALK_PTR BIT(0) 128#define HSIC_CLR_WAKE_ALARM BIT(3) 129#define HSIC_CAP_CFG BIT(4) 130 131#define XUSB_AO_UTMIP_SAVED_STATE(x) (0x70 + (x) * 4) 132#define SPEED(x) ((x) & 0x3) 133#define UTMI_HS SPEED(0) 134#define UTMI_FS SPEED(1) 135#define UTMI_LS SPEED(2) 136#define UTMI_RST SPEED(3) 137 138#define XUSB_AO_UHSIC_SAVED_STATE(x) (0x90 + (x) * 4) 139#define MODE(x) ((x) & 0x1) 140#define MODE_HS MODE(0) 141#define MODE_RST MODE(1) 142 143#define XUSB_AO_UTMIP_SLEEPWALK_CFG(x) (0xd0 + (x) * 4) 144#define XUSB_AO_UHSIC_SLEEPWALK_CFG(x) (0xf0 + (x) * 4) 145#define FAKE_USBOP_VAL BIT(0) 146#define FAKE_USBON_VAL BIT(1) 147#define FAKE_USBOP_EN BIT(2) 148#define FAKE_USBON_EN BIT(3) 149#define FAKE_STROBE_VAL BIT(0) 150#define FAKE_DATA_VAL BIT(1) 151#define FAKE_STROBE_EN BIT(2) 152#define FAKE_DATA_EN BIT(3) 153#define WAKE_WALK_EN BIT(14) 154#define MASTER_ENABLE BIT(15) 155#define LINEVAL_WALK_EN BIT(16) 156#define WAKE_VAL(x) (((x) & 0xf) << 17) 157#define WAKE_VAL_NONE WAKE_VAL(12) 158#define WAKE_VAL_ANY WAKE_VAL(15) 159#define WAKE_VAL_DS10 WAKE_VAL(2) 160#define LINE_WAKEUP_EN BIT(21) 161#define MASTER_CFG_SEL BIT(22) 162 163#define XUSB_AO_UTMIP_SLEEPWALK(x) (0x100 + (x) * 4) 164/* phase A */ 165#define USBOP_RPD_A BIT(0) 166#define USBON_RPD_A BIT(1) 167#define AP_A BIT(4) 168#define AN_A BIT(5) 169#define HIGHZ_A BIT(6) 170/* phase B */ 171#define USBOP_RPD_B BIT(8) 172#define USBON_RPD_B BIT(9) 173#define AP_B BIT(12) 174#define AN_B BIT(13) 175#define HIGHZ_B BIT(14) 176/* phase C */ 177#define USBOP_RPD_C BIT(16) 178#define USBON_RPD_C BIT(17) 179#define AP_C BIT(20) 180#define AN_C BIT(21) 181#define HIGHZ_C BIT(22) 182/* phase D */ 183#define USBOP_RPD_D BIT(24) 184#define USBON_RPD_D BIT(25) 185#define AP_D BIT(28) 186#define AN_D BIT(29) 187#define HIGHZ_D BIT(30) 188 189#define XUSB_AO_UHSIC_SLEEPWALK(x) (0x120 + (x) * 4) 190/* phase A */ 191#define RPD_STROBE_A BIT(0) 192#define RPD_DATA0_A BIT(1) 193#define RPU_STROBE_A BIT(2) 194#define RPU_DATA0_A BIT(3) 195/* phase B */ 196#define RPD_STROBE_B BIT(8) 197#define RPD_DATA0_B BIT(9) 198#define RPU_STROBE_B BIT(10) 199#define RPU_DATA0_B BIT(11) 200/* phase C */ 201#define RPD_STROBE_C BIT(16) 202#define RPD_DATA0_C BIT(17) 203#define RPU_STROBE_C BIT(18) 204#define RPU_DATA0_C BIT(19) 205/* phase D */ 206#define RPD_STROBE_D BIT(24) 207#define RPD_DATA0_D BIT(25) 208#define RPU_STROBE_D BIT(26) 209#define RPU_DATA0_D BIT(27) 210 211#define XUSB_AO_UTMIP_PAD_CFG(x) (0x130 + (x) * 4) 212#define FSLS_USE_XUSB_AO BIT(3) 213#define TRK_CTRL_USE_XUSB_AO BIT(4) 214#define RPD_CTRL_USE_XUSB_AO BIT(5) 215#define RPU_USE_XUSB_AO BIT(6) 216#define VREG_USE_XUSB_AO BIT(7) 217#define USBOP_VAL_PD BIT(8) 218#define USBON_VAL_PD BIT(9) 219#define E_DPD_OVRD_EN BIT(10) 220#define E_DPD_OVRD_VAL BIT(11) 221 222#define XUSB_AO_UHSIC_PAD_CFG(x) (0x150 + (x) * 4) 223#define STROBE_VAL_PD BIT(0) 224#define DATA0_VAL_PD BIT(1) 225#define USE_XUSB_AO BIT(4) 226 227#define TEGRA186_LANE(_name, _offset, _shift, _mask, _type) \ 228 { \ 229 .name = _name, \ 230 .offset = _offset, \ 231 .shift = _shift, \ 232 .mask = _mask, \ 233 .num_funcs = ARRAY_SIZE(tegra186_##_type##_functions), \ 234 .funcs = tegra186_##_type##_functions, \ 235 } 236 237struct tegra_xusb_fuse_calibration { 238 u32 *hs_curr_level; 239 u32 hs_squelch; 240 u32 hs_term_range_adj; 241 u32 rpd_ctrl; 242}; 243 244struct tegra186_xusb_padctl_context { 245 u32 vbus_id; 246 u32 usb2_pad_mux; 247 u32 usb2_port_cap; 248 u32 ss_port_cap; 249}; 250 251struct tegra186_xusb_padctl { 252 struct tegra_xusb_padctl base; 253 void __iomem *ao_regs; 254 255 struct tegra_xusb_fuse_calibration calib; 256 257 /* UTMI bias and tracking */ 258 struct clk *usb2_trk_clk; 259 unsigned int bias_pad_enable; 260 261 /* padctl context */ 262 struct tegra186_xusb_padctl_context context; 263}; 264 265static inline void ao_writel(struct tegra186_xusb_padctl *priv, u32 value, unsigned int offset) 266{ 267 writel(value, priv->ao_regs + offset); 268} 269 270static inline u32 ao_readl(struct tegra186_xusb_padctl *priv, unsigned int offset) 271{ 272 return readl(priv->ao_regs + offset); 273} 274 275static inline struct tegra186_xusb_padctl * 276to_tegra186_xusb_padctl(struct tegra_xusb_padctl *padctl) 277{ 278 return container_of(padctl, struct tegra186_xusb_padctl, base); 279} 280 281/* USB 2.0 UTMI PHY support */ 282static struct tegra_xusb_lane * 283tegra186_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np, 284 unsigned int index) 285{ 286 struct tegra_xusb_usb2_lane *usb2; 287 int err; 288 289 usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL); 290 if (!usb2) 291 return ERR_PTR(-ENOMEM); 292 293 INIT_LIST_HEAD(&usb2->base.list); 294 usb2->base.soc = &pad->soc->lanes[index]; 295 usb2->base.index = index; 296 usb2->base.pad = pad; 297 usb2->base.np = np; 298 299 err = tegra_xusb_lane_parse_dt(&usb2->base, np); 300 if (err < 0) { 301 kfree(usb2); 302 return ERR_PTR(err); 303 } 304 305 return &usb2->base; 306} 307 308static void tegra186_usb2_lane_remove(struct tegra_xusb_lane *lane) 309{ 310 struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane); 311 312 kfree(usb2); 313} 314 315static int tegra186_utmi_enable_phy_sleepwalk(struct tegra_xusb_lane *lane, 316 enum usb_device_speed speed) 317{ 318 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 319 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 320 unsigned int index = lane->index; 321 u32 value; 322 323 mutex_lock(&padctl->lock); 324 325 /* ensure sleepwalk logic is disabled */ 326 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 327 value &= ~MASTER_ENABLE; 328 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 329 330 /* ensure sleepwalk logics are in low power mode */ 331 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 332 value |= MASTER_CFG_SEL; 333 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 334 335 /* set debounce time */ 336 value = ao_readl(priv, XUSB_AO_USB_DEBOUNCE_DEL); 337 value &= ~UTMIP_LINE_DEB_CNT(~0); 338 value |= UTMIP_LINE_DEB_CNT(1); 339 ao_writel(priv, value, XUSB_AO_USB_DEBOUNCE_DEL); 340 341 /* ensure fake events of sleepwalk logic are desiabled */ 342 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 343 value &= ~(FAKE_USBOP_VAL | FAKE_USBON_VAL | 344 FAKE_USBOP_EN | FAKE_USBON_EN); 345 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 346 347 /* ensure wake events of sleepwalk logic are not latched */ 348 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 349 value &= ~LINE_WAKEUP_EN; 350 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 351 352 /* disable wake event triggers of sleepwalk logic */ 353 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 354 value &= ~WAKE_VAL(~0); 355 value |= WAKE_VAL_NONE; 356 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 357 358 /* power down the line state detectors of the pad */ 359 value = ao_readl(priv, XUSB_AO_UTMIP_PAD_CFG(index)); 360 value |= (USBOP_VAL_PD | USBON_VAL_PD); 361 ao_writel(priv, value, XUSB_AO_UTMIP_PAD_CFG(index)); 362 363 /* save state per speed */ 364 value = ao_readl(priv, XUSB_AO_UTMIP_SAVED_STATE(index)); 365 value &= ~SPEED(~0); 366 367 switch (speed) { 368 case USB_SPEED_HIGH: 369 value |= UTMI_HS; 370 break; 371 372 case USB_SPEED_FULL: 373 value |= UTMI_FS; 374 break; 375 376 case USB_SPEED_LOW: 377 value |= UTMI_LS; 378 break; 379 380 default: 381 value |= UTMI_RST; 382 break; 383 } 384 385 ao_writel(priv, value, XUSB_AO_UTMIP_SAVED_STATE(index)); 386 387 /* enable the trigger of the sleepwalk logic */ 388 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 389 value |= LINEVAL_WALK_EN; 390 value &= ~WAKE_WALK_EN; 391 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 392 393 /* reset the walk pointer and clear the alarm of the sleepwalk logic, 394 * as well as capture the configuration of the USB2.0 pad 395 */ 396 value = ao_readl(priv, XUSB_AO_UTMIP_TRIGGERS(index)); 397 value |= (CLR_WALK_PTR | CLR_WAKE_ALARM | CAP_CFG); 398 ao_writel(priv, value, XUSB_AO_UTMIP_TRIGGERS(index)); 399 400 /* setup the pull-ups and pull-downs of the signals during the four 401 * stages of sleepwalk. 402 * if device is connected, program sleepwalk logic to maintain a J and 403 * keep driving K upon seeing remote wake. 404 */ 405 value = USBOP_RPD_A | USBOP_RPD_B | USBOP_RPD_C | USBOP_RPD_D; 406 value |= USBON_RPD_A | USBON_RPD_B | USBON_RPD_C | USBON_RPD_D; 407 408 switch (speed) { 409 case USB_SPEED_HIGH: 410 case USB_SPEED_FULL: 411 /* J state: D+/D- = high/low, K state: D+/D- = low/high */ 412 value |= HIGHZ_A; 413 value |= AP_A; 414 value |= AN_B | AN_C | AN_D; 415 break; 416 417 case USB_SPEED_LOW: 418 /* J state: D+/D- = low/high, K state: D+/D- = high/low */ 419 value |= HIGHZ_A; 420 value |= AN_A; 421 value |= AP_B | AP_C | AP_D; 422 break; 423 424 default: 425 value |= HIGHZ_A | HIGHZ_B | HIGHZ_C | HIGHZ_D; 426 break; 427 } 428 429 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK(index)); 430 431 /* power up the line state detectors of the pad */ 432 value = ao_readl(priv, XUSB_AO_UTMIP_PAD_CFG(index)); 433 value &= ~(USBOP_VAL_PD | USBON_VAL_PD); 434 ao_writel(priv, value, XUSB_AO_UTMIP_PAD_CFG(index)); 435 436 usleep_range(150, 200); 437 438 /* switch the electric control of the USB2.0 pad to XUSB_AO */ 439 value = ao_readl(priv, XUSB_AO_UTMIP_PAD_CFG(index)); 440 value |= FSLS_USE_XUSB_AO | TRK_CTRL_USE_XUSB_AO | RPD_CTRL_USE_XUSB_AO | 441 RPU_USE_XUSB_AO | VREG_USE_XUSB_AO; 442 ao_writel(priv, value, XUSB_AO_UTMIP_PAD_CFG(index)); 443 444 /* set the wake signaling trigger events */ 445 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 446 value &= ~WAKE_VAL(~0); 447 value |= WAKE_VAL_ANY; 448 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 449 450 /* enable the wake detection */ 451 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 452 value |= MASTER_ENABLE | LINE_WAKEUP_EN; 453 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 454 455 mutex_unlock(&padctl->lock); 456 457 return 0; 458} 459 460static int tegra186_utmi_disable_phy_sleepwalk(struct tegra_xusb_lane *lane) 461{ 462 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 463 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 464 unsigned int index = lane->index; 465 u32 value; 466 467 mutex_lock(&padctl->lock); 468 469 /* disable the wake detection */ 470 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 471 value &= ~(MASTER_ENABLE | LINE_WAKEUP_EN); 472 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 473 474 /* switch the electric control of the USB2.0 pad to XUSB vcore logic */ 475 value = ao_readl(priv, XUSB_AO_UTMIP_PAD_CFG(index)); 476 value &= ~(FSLS_USE_XUSB_AO | TRK_CTRL_USE_XUSB_AO | RPD_CTRL_USE_XUSB_AO | 477 RPU_USE_XUSB_AO | VREG_USE_XUSB_AO); 478 ao_writel(priv, value, XUSB_AO_UTMIP_PAD_CFG(index)); 479 480 /* disable wake event triggers of sleepwalk logic */ 481 value = ao_readl(priv, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 482 value &= ~WAKE_VAL(~0); 483 value |= WAKE_VAL_NONE; 484 ao_writel(priv, value, XUSB_AO_UTMIP_SLEEPWALK_CFG(index)); 485 486 /* power down the line state detectors of the port */ 487 value = ao_readl(priv, XUSB_AO_UTMIP_PAD_CFG(index)); 488 value |= USBOP_VAL_PD | USBON_VAL_PD; 489 ao_writel(priv, value, XUSB_AO_UTMIP_PAD_CFG(index)); 490 491 /* clear alarm of the sleepwalk logic */ 492 value = ao_readl(priv, XUSB_AO_UTMIP_TRIGGERS(index)); 493 value |= CLR_WAKE_ALARM; 494 ao_writel(priv, value, XUSB_AO_UTMIP_TRIGGERS(index)); 495 496 mutex_unlock(&padctl->lock); 497 498 return 0; 499} 500 501static int tegra186_utmi_enable_phy_wake(struct tegra_xusb_lane *lane) 502{ 503 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 504 unsigned int index = lane->index; 505 u32 value; 506 507 mutex_lock(&padctl->lock); 508 509 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 510 value &= ~ALL_WAKE_EVENTS; 511 value |= USB2_PORT_WAKEUP_EVENT(index); 512 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 513 514 usleep_range(10, 20); 515 516 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 517 value &= ~ALL_WAKE_EVENTS; 518 value |= USB2_PORT_WAKE_INTERRUPT_ENABLE(index); 519 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 520 521 mutex_unlock(&padctl->lock); 522 523 return 0; 524} 525 526static int tegra186_utmi_disable_phy_wake(struct tegra_xusb_lane *lane) 527{ 528 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 529 unsigned int index = lane->index; 530 u32 value; 531 532 mutex_lock(&padctl->lock); 533 534 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 535 value &= ~ALL_WAKE_EVENTS; 536 value &= ~USB2_PORT_WAKE_INTERRUPT_ENABLE(index); 537 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 538 539 usleep_range(10, 20); 540 541 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 542 value &= ~ALL_WAKE_EVENTS; 543 value |= USB2_PORT_WAKEUP_EVENT(index); 544 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 545 546 mutex_unlock(&padctl->lock); 547 548 return 0; 549} 550 551static bool tegra186_utmi_phy_remote_wake_detected(struct tegra_xusb_lane *lane) 552{ 553 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 554 unsigned int index = lane->index; 555 u32 value; 556 557 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 558 if ((value & USB2_PORT_WAKE_INTERRUPT_ENABLE(index)) && 559 (value & USB2_PORT_WAKEUP_EVENT(index))) 560 return true; 561 562 return false; 563} 564 565static const struct tegra_xusb_lane_ops tegra186_usb2_lane_ops = { 566 .probe = tegra186_usb2_lane_probe, 567 .remove = tegra186_usb2_lane_remove, 568 .enable_phy_sleepwalk = tegra186_utmi_enable_phy_sleepwalk, 569 .disable_phy_sleepwalk = tegra186_utmi_disable_phy_sleepwalk, 570 .enable_phy_wake = tegra186_utmi_enable_phy_wake, 571 .disable_phy_wake = tegra186_utmi_disable_phy_wake, 572 .remote_wake_detected = tegra186_utmi_phy_remote_wake_detected, 573}; 574 575static void tegra186_utmi_bias_pad_power_on(struct tegra_xusb_padctl *padctl) 576{ 577 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 578 struct device *dev = padctl->dev; 579 u32 value; 580 int err; 581 582 mutex_lock(&padctl->lock); 583 584 if (priv->bias_pad_enable++ > 0) { 585 mutex_unlock(&padctl->lock); 586 return; 587 } 588 589 err = clk_prepare_enable(priv->usb2_trk_clk); 590 if (err < 0) 591 dev_warn(dev, "failed to enable USB2 trk clock: %d\n", err); 592 593 value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1); 594 value &= ~USB2_TRK_START_TIMER(~0); 595 value |= USB2_TRK_START_TIMER(0x1e); 596 value &= ~USB2_TRK_DONE_RESET_TIMER(~0); 597 value |= USB2_TRK_DONE_RESET_TIMER(0xa); 598 padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1); 599 600 value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0); 601 value &= ~BIAS_PAD_PD; 602 value &= ~HS_SQUELCH_LEVEL(~0); 603 value |= HS_SQUELCH_LEVEL(priv->calib.hs_squelch); 604 padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0); 605 606 udelay(1); 607 608 value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1); 609 value &= ~USB2_PD_TRK; 610 padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1); 611 612 mutex_unlock(&padctl->lock); 613} 614 615static void tegra186_utmi_bias_pad_power_off(struct tegra_xusb_padctl *padctl) 616{ 617 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 618 u32 value; 619 620 mutex_lock(&padctl->lock); 621 622 if (WARN_ON(priv->bias_pad_enable == 0)) { 623 mutex_unlock(&padctl->lock); 624 return; 625 } 626 627 if (--priv->bias_pad_enable > 0) { 628 mutex_unlock(&padctl->lock); 629 return; 630 } 631 632 value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1); 633 value |= USB2_PD_TRK; 634 padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1); 635 636 clk_disable_unprepare(priv->usb2_trk_clk); 637 638 mutex_unlock(&padctl->lock); 639} 640 641static void tegra_phy_xusb_utmi_pad_power_on(struct phy *phy) 642{ 643 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 644 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 645 struct tegra_xusb_usb2_port *port; 646 struct device *dev = padctl->dev; 647 unsigned int index = lane->index; 648 u32 value; 649 650 if (!phy) 651 return; 652 653 port = tegra_xusb_find_usb2_port(padctl, index); 654 if (!port) { 655 dev_err(dev, "no port found for USB2 lane %u\n", index); 656 return; 657 } 658 659 tegra186_utmi_bias_pad_power_on(padctl); 660 661 udelay(2); 662 663 value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index)); 664 value &= ~USB2_OTG_PD; 665 padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index)); 666 667 value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index)); 668 value &= ~USB2_OTG_PD_DR; 669 padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index)); 670} 671 672static void tegra_phy_xusb_utmi_pad_power_down(struct phy *phy) 673{ 674 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 675 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 676 unsigned int index = lane->index; 677 u32 value; 678 679 if (!phy) 680 return; 681 682 value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index)); 683 value |= USB2_OTG_PD; 684 padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index)); 685 686 value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index)); 687 value |= USB2_OTG_PD_DR; 688 padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index)); 689 690 udelay(2); 691 692 tegra186_utmi_bias_pad_power_off(padctl); 693} 694 695static int tegra186_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl, 696 bool status) 697{ 698 u32 value; 699 700 dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear"); 701 702 value = padctl_readl(padctl, USB2_VBUS_ID); 703 704 if (status) { 705 value |= VBUS_OVERRIDE; 706 value &= ~ID_OVERRIDE(~0); 707 value |= ID_OVERRIDE_FLOATING; 708 } else { 709 value &= ~VBUS_OVERRIDE; 710 } 711 712 padctl_writel(padctl, value, USB2_VBUS_ID); 713 714 return 0; 715} 716 717static int tegra186_xusb_padctl_id_override(struct tegra_xusb_padctl *padctl, 718 bool status) 719{ 720 u32 value; 721 722 dev_dbg(padctl->dev, "%s id override\n", status ? "set" : "clear"); 723 724 value = padctl_readl(padctl, USB2_VBUS_ID); 725 726 if (status) { 727 if (value & VBUS_OVERRIDE) { 728 value &= ~VBUS_OVERRIDE; 729 padctl_writel(padctl, value, USB2_VBUS_ID); 730 usleep_range(1000, 2000); 731 732 value = padctl_readl(padctl, USB2_VBUS_ID); 733 } 734 735 value &= ~ID_OVERRIDE(~0); 736 value |= ID_OVERRIDE_GROUNDED; 737 } else { 738 value &= ~ID_OVERRIDE(~0); 739 value |= ID_OVERRIDE_FLOATING; 740 } 741 742 padctl_writel(padctl, value, USB2_VBUS_ID); 743 744 return 0; 745} 746 747static int tegra186_utmi_phy_set_mode(struct phy *phy, enum phy_mode mode, 748 int submode) 749{ 750 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 751 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 752 struct tegra_xusb_usb2_port *port = tegra_xusb_find_usb2_port(padctl, 753 lane->index); 754 int err = 0; 755 756 mutex_lock(&padctl->lock); 757 758 dev_dbg(&port->base.dev, "%s: mode %d", __func__, mode); 759 760 if (mode == PHY_MODE_USB_OTG) { 761 if (submode == USB_ROLE_HOST) { 762 tegra186_xusb_padctl_id_override(padctl, true); 763 764 err = regulator_enable(port->supply); 765 } else if (submode == USB_ROLE_DEVICE) { 766 tegra186_xusb_padctl_vbus_override(padctl, true); 767 } else if (submode == USB_ROLE_NONE) { 768 /* 769 * When port is peripheral only or role transitions to 770 * USB_ROLE_NONE from USB_ROLE_DEVICE, regulator is not 771 * enabled. 772 */ 773 if (regulator_is_enabled(port->supply)) 774 regulator_disable(port->supply); 775 776 tegra186_xusb_padctl_id_override(padctl, false); 777 tegra186_xusb_padctl_vbus_override(padctl, false); 778 } 779 } 780 781 mutex_unlock(&padctl->lock); 782 783 return err; 784} 785 786static int tegra186_utmi_phy_power_on(struct phy *phy) 787{ 788 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 789 struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane); 790 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 791 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 792 struct tegra_xusb_usb2_port *port; 793 unsigned int index = lane->index; 794 struct device *dev = padctl->dev; 795 u32 value; 796 797 port = tegra_xusb_find_usb2_port(padctl, index); 798 if (!port) { 799 dev_err(dev, "no port found for USB2 lane %u\n", index); 800 return -ENODEV; 801 } 802 803 value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX); 804 value &= ~(USB2_PORT_MASK << USB2_PORT_SHIFT(index)); 805 value |= (PORT_XUSB << USB2_PORT_SHIFT(index)); 806 padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX); 807 808 value = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP); 809 value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index)); 810 811 if (port->mode == USB_DR_MODE_UNKNOWN) 812 value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index)); 813 else if (port->mode == USB_DR_MODE_PERIPHERAL) 814 value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index)); 815 else if (port->mode == USB_DR_MODE_HOST) 816 value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index)); 817 else if (port->mode == USB_DR_MODE_OTG) 818 value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index)); 819 820 padctl_writel(padctl, value, XUSB_PADCTL_USB2_PORT_CAP); 821 822 value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index)); 823 value &= ~USB2_OTG_PD_ZI; 824 value |= TERM_SEL; 825 value &= ~HS_CURR_LEVEL(~0); 826 827 if (usb2->hs_curr_level_offset) { 828 int hs_current_level; 829 830 hs_current_level = (int)priv->calib.hs_curr_level[index] + 831 usb2->hs_curr_level_offset; 832 833 if (hs_current_level < 0) 834 hs_current_level = 0; 835 if (hs_current_level > 0x3f) 836 hs_current_level = 0x3f; 837 838 value |= HS_CURR_LEVEL(hs_current_level); 839 } else { 840 value |= HS_CURR_LEVEL(priv->calib.hs_curr_level[index]); 841 } 842 843 padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index)); 844 845 value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index)); 846 value &= ~TERM_RANGE_ADJ(~0); 847 value |= TERM_RANGE_ADJ(priv->calib.hs_term_range_adj); 848 value &= ~RPD_CTRL(~0); 849 value |= RPD_CTRL(priv->calib.rpd_ctrl); 850 padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index)); 851 852 /* TODO: pad power saving */ 853 tegra_phy_xusb_utmi_pad_power_on(phy); 854 return 0; 855} 856 857static int tegra186_utmi_phy_power_off(struct phy *phy) 858{ 859 /* TODO: pad power saving */ 860 tegra_phy_xusb_utmi_pad_power_down(phy); 861 862 return 0; 863} 864 865static int tegra186_utmi_phy_init(struct phy *phy) 866{ 867 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 868 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 869 struct tegra_xusb_usb2_port *port; 870 unsigned int index = lane->index; 871 struct device *dev = padctl->dev; 872 int err; 873 874 port = tegra_xusb_find_usb2_port(padctl, index); 875 if (!port) { 876 dev_err(dev, "no port found for USB2 lane %u\n", index); 877 return -ENODEV; 878 } 879 880 if (port->supply && port->mode == USB_DR_MODE_HOST) { 881 err = regulator_enable(port->supply); 882 if (err) { 883 dev_err(dev, "failed to enable port %u VBUS: %d\n", 884 index, err); 885 return err; 886 } 887 } 888 889 return 0; 890} 891 892static int tegra186_utmi_phy_exit(struct phy *phy) 893{ 894 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 895 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 896 struct tegra_xusb_usb2_port *port; 897 unsigned int index = lane->index; 898 struct device *dev = padctl->dev; 899 int err; 900 901 port = tegra_xusb_find_usb2_port(padctl, index); 902 if (!port) { 903 dev_err(dev, "no port found for USB2 lane %u\n", index); 904 return -ENODEV; 905 } 906 907 if (port->supply && port->mode == USB_DR_MODE_HOST) { 908 err = regulator_disable(port->supply); 909 if (err) { 910 dev_err(dev, "failed to disable port %u VBUS: %d\n", 911 index, err); 912 return err; 913 } 914 } 915 916 return 0; 917} 918 919static const struct phy_ops utmi_phy_ops = { 920 .init = tegra186_utmi_phy_init, 921 .exit = tegra186_utmi_phy_exit, 922 .power_on = tegra186_utmi_phy_power_on, 923 .power_off = tegra186_utmi_phy_power_off, 924 .set_mode = tegra186_utmi_phy_set_mode, 925 .owner = THIS_MODULE, 926}; 927 928static struct tegra_xusb_pad * 929tegra186_usb2_pad_probe(struct tegra_xusb_padctl *padctl, 930 const struct tegra_xusb_pad_soc *soc, 931 struct device_node *np) 932{ 933 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 934 struct tegra_xusb_usb2_pad *usb2; 935 struct tegra_xusb_pad *pad; 936 int err; 937 938 usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL); 939 if (!usb2) 940 return ERR_PTR(-ENOMEM); 941 942 pad = &usb2->base; 943 pad->ops = &tegra186_usb2_lane_ops; 944 pad->soc = soc; 945 946 err = tegra_xusb_pad_init(pad, padctl, np); 947 if (err < 0) { 948 kfree(usb2); 949 goto out; 950 } 951 952 priv->usb2_trk_clk = devm_clk_get(&pad->dev, "trk"); 953 if (IS_ERR(priv->usb2_trk_clk)) { 954 err = PTR_ERR(priv->usb2_trk_clk); 955 dev_dbg(&pad->dev, "failed to get usb2 trk clock: %d\n", err); 956 goto unregister; 957 } 958 959 err = tegra_xusb_pad_register(pad, &utmi_phy_ops); 960 if (err < 0) 961 goto unregister; 962 963 dev_set_drvdata(&pad->dev, pad); 964 965 return pad; 966 967unregister: 968 device_unregister(&pad->dev); 969out: 970 return ERR_PTR(err); 971} 972 973static void tegra186_usb2_pad_remove(struct tegra_xusb_pad *pad) 974{ 975 struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad); 976 977 kfree(usb2); 978} 979 980static const struct tegra_xusb_pad_ops tegra186_usb2_pad_ops = { 981 .probe = tegra186_usb2_pad_probe, 982 .remove = tegra186_usb2_pad_remove, 983}; 984 985static const char * const tegra186_usb2_functions[] = { 986 "xusb", 987}; 988 989static int tegra186_usb2_port_enable(struct tegra_xusb_port *port) 990{ 991 return 0; 992} 993 994static void tegra186_usb2_port_disable(struct tegra_xusb_port *port) 995{ 996} 997 998static struct tegra_xusb_lane * 999tegra186_usb2_port_map(struct tegra_xusb_port *port) 1000{ 1001 return tegra_xusb_find_lane(port->padctl, "usb2", port->index); 1002} 1003 1004static const struct tegra_xusb_port_ops tegra186_usb2_port_ops = { 1005 .release = tegra_xusb_usb2_port_release, 1006 .remove = tegra_xusb_usb2_port_remove, 1007 .enable = tegra186_usb2_port_enable, 1008 .disable = tegra186_usb2_port_disable, 1009 .map = tegra186_usb2_port_map, 1010}; 1011 1012/* SuperSpeed PHY support */ 1013static struct tegra_xusb_lane * 1014tegra186_usb3_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np, 1015 unsigned int index) 1016{ 1017 struct tegra_xusb_usb3_lane *usb3; 1018 int err; 1019 1020 usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL); 1021 if (!usb3) 1022 return ERR_PTR(-ENOMEM); 1023 1024 INIT_LIST_HEAD(&usb3->base.list); 1025 usb3->base.soc = &pad->soc->lanes[index]; 1026 usb3->base.index = index; 1027 usb3->base.pad = pad; 1028 usb3->base.np = np; 1029 1030 err = tegra_xusb_lane_parse_dt(&usb3->base, np); 1031 if (err < 0) { 1032 kfree(usb3); 1033 return ERR_PTR(err); 1034 } 1035 1036 return &usb3->base; 1037} 1038 1039static void tegra186_usb3_lane_remove(struct tegra_xusb_lane *lane) 1040{ 1041 struct tegra_xusb_usb3_lane *usb3 = to_usb3_lane(lane); 1042 1043 kfree(usb3); 1044} 1045 1046static int tegra186_usb3_enable_phy_sleepwalk(struct tegra_xusb_lane *lane, 1047 enum usb_device_speed speed) 1048{ 1049 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1050 unsigned int index = lane->index; 1051 u32 value; 1052 1053 mutex_lock(&padctl->lock); 1054 1055 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1056 value |= SSPX_ELPG_CLAMP_EN_EARLY(index); 1057 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1058 1059 usleep_range(100, 200); 1060 1061 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1062 value |= SSPX_ELPG_CLAMP_EN(index); 1063 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1064 1065 usleep_range(250, 350); 1066 1067 mutex_unlock(&padctl->lock); 1068 1069 return 0; 1070} 1071 1072static int tegra186_usb3_disable_phy_sleepwalk(struct tegra_xusb_lane *lane) 1073{ 1074 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1075 unsigned int index = lane->index; 1076 u32 value; 1077 1078 mutex_lock(&padctl->lock); 1079 1080 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1081 value &= ~SSPX_ELPG_CLAMP_EN_EARLY(index); 1082 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1083 1084 usleep_range(100, 200); 1085 1086 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1087 value &= ~SSPX_ELPG_CLAMP_EN(index); 1088 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1089 1090 mutex_unlock(&padctl->lock); 1091 1092 return 0; 1093} 1094 1095static int tegra186_usb3_enable_phy_wake(struct tegra_xusb_lane *lane) 1096{ 1097 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1098 unsigned int index = lane->index; 1099 u32 value; 1100 1101 mutex_lock(&padctl->lock); 1102 1103 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 1104 value &= ~ALL_WAKE_EVENTS; 1105 value |= SS_PORT_WAKEUP_EVENT(index); 1106 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 1107 1108 usleep_range(10, 20); 1109 1110 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 1111 value &= ~ALL_WAKE_EVENTS; 1112 value |= SS_PORT_WAKE_INTERRUPT_ENABLE(index); 1113 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 1114 1115 mutex_unlock(&padctl->lock); 1116 1117 return 0; 1118} 1119 1120static int tegra186_usb3_disable_phy_wake(struct tegra_xusb_lane *lane) 1121{ 1122 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1123 unsigned int index = lane->index; 1124 u32 value; 1125 1126 mutex_lock(&padctl->lock); 1127 1128 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 1129 value &= ~ALL_WAKE_EVENTS; 1130 value &= ~SS_PORT_WAKE_INTERRUPT_ENABLE(index); 1131 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 1132 1133 usleep_range(10, 20); 1134 1135 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 1136 value &= ~ALL_WAKE_EVENTS; 1137 value |= SS_PORT_WAKEUP_EVENT(index); 1138 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 1139 1140 mutex_unlock(&padctl->lock); 1141 1142 return 0; 1143} 1144 1145static bool tegra186_usb3_phy_remote_wake_detected(struct tegra_xusb_lane *lane) 1146{ 1147 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1148 unsigned int index = lane->index; 1149 u32 value; 1150 1151 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 1152 if ((value & SS_PORT_WAKE_INTERRUPT_ENABLE(index)) && (value & SS_PORT_WAKEUP_EVENT(index))) 1153 return true; 1154 1155 return false; 1156} 1157 1158static const struct tegra_xusb_lane_ops tegra186_usb3_lane_ops = { 1159 .probe = tegra186_usb3_lane_probe, 1160 .remove = tegra186_usb3_lane_remove, 1161 .enable_phy_sleepwalk = tegra186_usb3_enable_phy_sleepwalk, 1162 .disable_phy_sleepwalk = tegra186_usb3_disable_phy_sleepwalk, 1163 .enable_phy_wake = tegra186_usb3_enable_phy_wake, 1164 .disable_phy_wake = tegra186_usb3_disable_phy_wake, 1165 .remote_wake_detected = tegra186_usb3_phy_remote_wake_detected, 1166}; 1167 1168static int tegra186_usb3_port_enable(struct tegra_xusb_port *port) 1169{ 1170 return 0; 1171} 1172 1173static void tegra186_usb3_port_disable(struct tegra_xusb_port *port) 1174{ 1175} 1176 1177static struct tegra_xusb_lane * 1178tegra186_usb3_port_map(struct tegra_xusb_port *port) 1179{ 1180 return tegra_xusb_find_lane(port->padctl, "usb3", port->index); 1181} 1182 1183static const struct tegra_xusb_port_ops tegra186_usb3_port_ops = { 1184 .release = tegra_xusb_usb3_port_release, 1185 .remove = tegra_xusb_usb3_port_remove, 1186 .enable = tegra186_usb3_port_enable, 1187 .disable = tegra186_usb3_port_disable, 1188 .map = tegra186_usb3_port_map, 1189}; 1190 1191static int tegra186_usb3_phy_power_on(struct phy *phy) 1192{ 1193 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 1194 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1195 struct tegra_xusb_usb3_port *port; 1196 struct tegra_xusb_usb2_port *usb2; 1197 unsigned int index = lane->index; 1198 struct device *dev = padctl->dev; 1199 u32 value; 1200 1201 port = tegra_xusb_find_usb3_port(padctl, index); 1202 if (!port) { 1203 dev_err(dev, "no port found for USB3 lane %u\n", index); 1204 return -ENODEV; 1205 } 1206 1207 usb2 = tegra_xusb_find_usb2_port(padctl, port->port); 1208 if (!usb2) { 1209 dev_err(dev, "no companion port found for USB3 lane %u\n", 1210 index); 1211 return -ENODEV; 1212 } 1213 1214 mutex_lock(&padctl->lock); 1215 1216 value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CAP); 1217 value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index)); 1218 1219 if (usb2->mode == USB_DR_MODE_UNKNOWN) 1220 value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index)); 1221 else if (usb2->mode == USB_DR_MODE_PERIPHERAL) 1222 value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index)); 1223 else if (usb2->mode == USB_DR_MODE_HOST) 1224 value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index)); 1225 else if (usb2->mode == USB_DR_MODE_OTG) 1226 value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index)); 1227 1228 padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CAP); 1229 1230 if (padctl->soc->supports_gen2 && port->disable_gen2) { 1231 value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CFG); 1232 value &= ~(PORTX_SPEED_SUPPORT_MASK << 1233 PORTX_SPEED_SUPPORT_SHIFT(index)); 1234 value |= (PORT_SPEED_SUPPORT_GEN1 << 1235 PORTX_SPEED_SUPPORT_SHIFT(index)); 1236 padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CFG); 1237 } 1238 1239 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1240 value &= ~SSPX_ELPG_VCORE_DOWN(index); 1241 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1242 1243 usleep_range(100, 200); 1244 1245 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1246 value &= ~SSPX_ELPG_CLAMP_EN_EARLY(index); 1247 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1248 1249 usleep_range(100, 200); 1250 1251 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1252 value &= ~SSPX_ELPG_CLAMP_EN(index); 1253 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1254 1255 mutex_unlock(&padctl->lock); 1256 1257 return 0; 1258} 1259 1260static int tegra186_usb3_phy_power_off(struct phy *phy) 1261{ 1262 struct tegra_xusb_lane *lane = phy_get_drvdata(phy); 1263 struct tegra_xusb_padctl *padctl = lane->pad->padctl; 1264 struct tegra_xusb_usb3_port *port; 1265 unsigned int index = lane->index; 1266 struct device *dev = padctl->dev; 1267 u32 value; 1268 1269 port = tegra_xusb_find_usb3_port(padctl, index); 1270 if (!port) { 1271 dev_err(dev, "no port found for USB3 lane %u\n", index); 1272 return -ENODEV; 1273 } 1274 1275 mutex_lock(&padctl->lock); 1276 1277 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1278 value |= SSPX_ELPG_CLAMP_EN_EARLY(index); 1279 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1280 1281 usleep_range(100, 200); 1282 1283 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1284 value |= SSPX_ELPG_CLAMP_EN(index); 1285 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1286 1287 usleep_range(250, 350); 1288 1289 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1); 1290 value |= SSPX_ELPG_VCORE_DOWN(index); 1291 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1); 1292 1293 mutex_unlock(&padctl->lock); 1294 1295 return 0; 1296} 1297 1298static int tegra186_usb3_phy_init(struct phy *phy) 1299{ 1300 return 0; 1301} 1302 1303static int tegra186_usb3_phy_exit(struct phy *phy) 1304{ 1305 return 0; 1306} 1307 1308static const struct phy_ops usb3_phy_ops = { 1309 .init = tegra186_usb3_phy_init, 1310 .exit = tegra186_usb3_phy_exit, 1311 .power_on = tegra186_usb3_phy_power_on, 1312 .power_off = tegra186_usb3_phy_power_off, 1313 .owner = THIS_MODULE, 1314}; 1315 1316static struct tegra_xusb_pad * 1317tegra186_usb3_pad_probe(struct tegra_xusb_padctl *padctl, 1318 const struct tegra_xusb_pad_soc *soc, 1319 struct device_node *np) 1320{ 1321 struct tegra_xusb_usb3_pad *usb3; 1322 struct tegra_xusb_pad *pad; 1323 int err; 1324 1325 usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL); 1326 if (!usb3) 1327 return ERR_PTR(-ENOMEM); 1328 1329 pad = &usb3->base; 1330 pad->ops = &tegra186_usb3_lane_ops; 1331 pad->soc = soc; 1332 1333 err = tegra_xusb_pad_init(pad, padctl, np); 1334 if (err < 0) { 1335 kfree(usb3); 1336 goto out; 1337 } 1338 1339 err = tegra_xusb_pad_register(pad, &usb3_phy_ops); 1340 if (err < 0) 1341 goto unregister; 1342 1343 dev_set_drvdata(&pad->dev, pad); 1344 1345 return pad; 1346 1347unregister: 1348 device_unregister(&pad->dev); 1349out: 1350 return ERR_PTR(err); 1351} 1352 1353static void tegra186_usb3_pad_remove(struct tegra_xusb_pad *pad) 1354{ 1355 struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad); 1356 1357 kfree(usb2); 1358} 1359 1360static const struct tegra_xusb_pad_ops tegra186_usb3_pad_ops = { 1361 .probe = tegra186_usb3_pad_probe, 1362 .remove = tegra186_usb3_pad_remove, 1363}; 1364 1365static const char * const tegra186_usb3_functions[] = { 1366 "xusb", 1367}; 1368 1369static int 1370tegra186_xusb_read_fuse_calibration(struct tegra186_xusb_padctl *padctl) 1371{ 1372 struct device *dev = padctl->base.dev; 1373 unsigned int i, count; 1374 u32 value, *level; 1375 int err; 1376 1377 count = padctl->base.soc->ports.usb2.count; 1378 1379 level = devm_kcalloc(dev, count, sizeof(u32), GFP_KERNEL); 1380 if (!level) 1381 return -ENOMEM; 1382 1383 err = tegra_fuse_readl(TEGRA_FUSE_SKU_CALIB_0, &value); 1384 if (err) { 1385 if (err != -EPROBE_DEFER) 1386 dev_err(dev, "failed to read calibration fuse: %d\n", 1387 err); 1388 return err; 1389 } 1390 1391 dev_dbg(dev, "FUSE_USB_CALIB_0 %#x\n", value); 1392 1393 for (i = 0; i < count; i++) 1394 level[i] = (value >> HS_CURR_LEVEL_PADX_SHIFT(i)) & 1395 HS_CURR_LEVEL_PAD_MASK; 1396 1397 padctl->calib.hs_curr_level = level; 1398 1399 padctl->calib.hs_squelch = (value >> HS_SQUELCH_SHIFT) & 1400 HS_SQUELCH_MASK; 1401 padctl->calib.hs_term_range_adj = (value >> HS_TERM_RANGE_ADJ_SHIFT) & 1402 HS_TERM_RANGE_ADJ_MASK; 1403 1404 err = tegra_fuse_readl(TEGRA_FUSE_USB_CALIB_EXT_0, &value); 1405 if (err) { 1406 dev_err(dev, "failed to read calibration fuse: %d\n", err); 1407 return err; 1408 } 1409 1410 dev_dbg(dev, "FUSE_USB_CALIB_EXT_0 %#x\n", value); 1411 1412 padctl->calib.rpd_ctrl = (value >> RPD_CTRL_SHIFT) & RPD_CTRL_MASK; 1413 1414 return 0; 1415} 1416 1417static struct tegra_xusb_padctl * 1418tegra186_xusb_padctl_probe(struct device *dev, 1419 const struct tegra_xusb_padctl_soc *soc) 1420{ 1421 struct platform_device *pdev = to_platform_device(dev); 1422 struct tegra186_xusb_padctl *priv; 1423 struct resource *res; 1424 int err; 1425 1426 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); 1427 if (!priv) 1428 return ERR_PTR(-ENOMEM); 1429 1430 priv->base.dev = dev; 1431 priv->base.soc = soc; 1432 1433 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ao"); 1434 priv->ao_regs = devm_ioremap_resource(dev, res); 1435 if (IS_ERR(priv->ao_regs)) 1436 return ERR_CAST(priv->ao_regs); 1437 1438 err = tegra186_xusb_read_fuse_calibration(priv); 1439 if (err < 0) 1440 return ERR_PTR(err); 1441 1442 return &priv->base; 1443} 1444 1445static void tegra186_xusb_padctl_save(struct tegra_xusb_padctl *padctl) 1446{ 1447 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 1448 1449 priv->context.vbus_id = padctl_readl(padctl, USB2_VBUS_ID); 1450 priv->context.usb2_pad_mux = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX); 1451 priv->context.usb2_port_cap = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP); 1452 priv->context.ss_port_cap = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CAP); 1453} 1454 1455static void tegra186_xusb_padctl_restore(struct tegra_xusb_padctl *padctl) 1456{ 1457 struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl); 1458 1459 padctl_writel(padctl, priv->context.usb2_pad_mux, XUSB_PADCTL_USB2_PAD_MUX); 1460 padctl_writel(padctl, priv->context.usb2_port_cap, XUSB_PADCTL_USB2_PORT_CAP); 1461 padctl_writel(padctl, priv->context.ss_port_cap, XUSB_PADCTL_SS_PORT_CAP); 1462 padctl_writel(padctl, priv->context.vbus_id, USB2_VBUS_ID); 1463} 1464 1465static int tegra186_xusb_padctl_suspend_noirq(struct tegra_xusb_padctl *padctl) 1466{ 1467 tegra186_xusb_padctl_save(padctl); 1468 1469 return 0; 1470} 1471 1472static int tegra186_xusb_padctl_resume_noirq(struct tegra_xusb_padctl *padctl) 1473{ 1474 tegra186_xusb_padctl_restore(padctl); 1475 1476 return 0; 1477} 1478 1479static void tegra186_xusb_padctl_remove(struct tegra_xusb_padctl *padctl) 1480{ 1481} 1482 1483static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = { 1484 .probe = tegra186_xusb_padctl_probe, 1485 .remove = tegra186_xusb_padctl_remove, 1486 .suspend_noirq = tegra186_xusb_padctl_suspend_noirq, 1487 .resume_noirq = tegra186_xusb_padctl_resume_noirq, 1488 .vbus_override = tegra186_xusb_padctl_vbus_override, 1489}; 1490 1491#if IS_ENABLED(CONFIG_ARCH_TEGRA_186_SOC) 1492static const char * const tegra186_xusb_padctl_supply_names[] = { 1493 "avdd-pll-erefeut", 1494 "avdd-usb", 1495 "vclamp-usb", 1496 "vddio-hsic", 1497}; 1498 1499static const struct tegra_xusb_lane_soc tegra186_usb2_lanes[] = { 1500 TEGRA186_LANE("usb2-0", 0, 0, 0, usb2), 1501 TEGRA186_LANE("usb2-1", 0, 0, 0, usb2), 1502 TEGRA186_LANE("usb2-2", 0, 0, 0, usb2), 1503}; 1504 1505static const struct tegra_xusb_pad_soc tegra186_usb2_pad = { 1506 .name = "usb2", 1507 .num_lanes = ARRAY_SIZE(tegra186_usb2_lanes), 1508 .lanes = tegra186_usb2_lanes, 1509 .ops = &tegra186_usb2_pad_ops, 1510}; 1511 1512static const struct tegra_xusb_lane_soc tegra186_usb3_lanes[] = { 1513 TEGRA186_LANE("usb3-0", 0, 0, 0, usb3), 1514 TEGRA186_LANE("usb3-1", 0, 0, 0, usb3), 1515 TEGRA186_LANE("usb3-2", 0, 0, 0, usb3), 1516}; 1517 1518static const struct tegra_xusb_pad_soc tegra186_usb3_pad = { 1519 .name = "usb3", 1520 .num_lanes = ARRAY_SIZE(tegra186_usb3_lanes), 1521 .lanes = tegra186_usb3_lanes, 1522 .ops = &tegra186_usb3_pad_ops, 1523}; 1524 1525static const struct tegra_xusb_pad_soc * const tegra186_pads[] = { 1526 &tegra186_usb2_pad, 1527 &tegra186_usb3_pad, 1528#if 0 /* TODO implement */ 1529 &tegra186_hsic_pad, 1530#endif 1531}; 1532 1533const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc = { 1534 .num_pads = ARRAY_SIZE(tegra186_pads), 1535 .pads = tegra186_pads, 1536 .ports = { 1537 .usb2 = { 1538 .ops = &tegra186_usb2_port_ops, 1539 .count = 3, 1540 }, 1541#if 0 /* TODO implement */ 1542 .hsic = { 1543 .ops = &tegra186_hsic_port_ops, 1544 .count = 1, 1545 }, 1546#endif 1547 .usb3 = { 1548 .ops = &tegra186_usb3_port_ops, 1549 .count = 3, 1550 }, 1551 }, 1552 .ops = &tegra186_xusb_padctl_ops, 1553 .supply_names = tegra186_xusb_padctl_supply_names, 1554 .num_supplies = ARRAY_SIZE(tegra186_xusb_padctl_supply_names), 1555}; 1556EXPORT_SYMBOL_GPL(tegra186_xusb_padctl_soc); 1557#endif 1558 1559#if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) 1560static const char * const tegra194_xusb_padctl_supply_names[] = { 1561 "avdd-usb", 1562 "vclamp-usb", 1563}; 1564 1565static const struct tegra_xusb_lane_soc tegra194_usb2_lanes[] = { 1566 TEGRA186_LANE("usb2-0", 0, 0, 0, usb2), 1567 TEGRA186_LANE("usb2-1", 0, 0, 0, usb2), 1568 TEGRA186_LANE("usb2-2", 0, 0, 0, usb2), 1569 TEGRA186_LANE("usb2-3", 0, 0, 0, usb2), 1570}; 1571 1572static const struct tegra_xusb_pad_soc tegra194_usb2_pad = { 1573 .name = "usb2", 1574 .num_lanes = ARRAY_SIZE(tegra194_usb2_lanes), 1575 .lanes = tegra194_usb2_lanes, 1576 .ops = &tegra186_usb2_pad_ops, 1577}; 1578 1579static const struct tegra_xusb_lane_soc tegra194_usb3_lanes[] = { 1580 TEGRA186_LANE("usb3-0", 0, 0, 0, usb3), 1581 TEGRA186_LANE("usb3-1", 0, 0, 0, usb3), 1582 TEGRA186_LANE("usb3-2", 0, 0, 0, usb3), 1583 TEGRA186_LANE("usb3-3", 0, 0, 0, usb3), 1584}; 1585 1586static const struct tegra_xusb_pad_soc tegra194_usb3_pad = { 1587 .name = "usb3", 1588 .num_lanes = ARRAY_SIZE(tegra194_usb3_lanes), 1589 .lanes = tegra194_usb3_lanes, 1590 .ops = &tegra186_usb3_pad_ops, 1591}; 1592 1593static const struct tegra_xusb_pad_soc * const tegra194_pads[] = { 1594 &tegra194_usb2_pad, 1595 &tegra194_usb3_pad, 1596}; 1597 1598const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc = { 1599 .num_pads = ARRAY_SIZE(tegra194_pads), 1600 .pads = tegra194_pads, 1601 .ports = { 1602 .usb2 = { 1603 .ops = &tegra186_usb2_port_ops, 1604 .count = 4, 1605 }, 1606 .usb3 = { 1607 .ops = &tegra186_usb3_port_ops, 1608 .count = 4, 1609 }, 1610 }, 1611 .ops = &tegra186_xusb_padctl_ops, 1612 .supply_names = tegra194_xusb_padctl_supply_names, 1613 .num_supplies = ARRAY_SIZE(tegra194_xusb_padctl_supply_names), 1614 .supports_gen2 = true, 1615}; 1616EXPORT_SYMBOL_GPL(tegra194_xusb_padctl_soc); 1617#endif 1618 1619MODULE_AUTHOR("JC Kuo <jckuo@nvidia.com>"); 1620MODULE_DESCRIPTION("NVIDIA Tegra186 XUSB Pad Controller driver"); 1621MODULE_LICENSE("GPL v2");