pinctrl-tegra-xusb.c (25012B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2014, 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/pinctrl/pinctrl.h> 12#include <linux/pinctrl/pinmux.h> 13#include <linux/platform_device.h> 14#include <linux/reset.h> 15#include <linux/slab.h> 16 17#include <dt-bindings/pinctrl/pinctrl-tegra-xusb.h> 18 19#include "../core.h" 20#include "../pinctrl-utils.h" 21 22#define XUSB_PADCTL_ELPG_PROGRAM 0x01c 23#define XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_VCORE_DOWN (1 << 26) 24#define XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN_EARLY (1 << 25) 25#define XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN (1 << 24) 26 27#define XUSB_PADCTL_IOPHY_PLL_P0_CTL1 0x040 28#define XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL0_LOCKDET (1 << 19) 29#define XUSB_PADCTL_IOPHY_PLL_P0_CTL1_REFCLK_SEL_MASK (0xf << 12) 30#define XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL_RST (1 << 1) 31 32#define XUSB_PADCTL_IOPHY_PLL_P0_CTL2 0x044 33#define XUSB_PADCTL_IOPHY_PLL_P0_CTL2_REFCLKBUF_EN (1 << 6) 34#define XUSB_PADCTL_IOPHY_PLL_P0_CTL2_TXCLKREF_EN (1 << 5) 35#define XUSB_PADCTL_IOPHY_PLL_P0_CTL2_TXCLKREF_SEL (1 << 4) 36 37#define XUSB_PADCTL_IOPHY_PLL_S0_CTL1 0x138 38#define XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL1_LOCKDET (1 << 27) 39#define XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL1_MODE (1 << 24) 40#define XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_PWR_OVRD (1 << 3) 41#define XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_RST (1 << 1) 42#define XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_IDDQ (1 << 0) 43 44#define XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1 0x148 45#define XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1_IDDQ_OVRD (1 << 1) 46#define XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1_IDDQ (1 << 0) 47 48struct tegra_xusb_padctl_function { 49 const char *name; 50 const char * const *groups; 51 unsigned int num_groups; 52}; 53 54struct tegra_xusb_padctl_soc { 55 const struct pinctrl_pin_desc *pins; 56 unsigned int num_pins; 57 58 const struct tegra_xusb_padctl_function *functions; 59 unsigned int num_functions; 60 61 const struct tegra_xusb_padctl_lane *lanes; 62 unsigned int num_lanes; 63}; 64 65struct tegra_xusb_padctl_lane { 66 const char *name; 67 68 unsigned int offset; 69 unsigned int shift; 70 unsigned int mask; 71 unsigned int iddq; 72 73 const unsigned int *funcs; 74 unsigned int num_funcs; 75}; 76 77struct tegra_xusb_padctl { 78 struct device *dev; 79 void __iomem *regs; 80 struct mutex lock; 81 struct reset_control *rst; 82 83 const struct tegra_xusb_padctl_soc *soc; 84 struct pinctrl_dev *pinctrl; 85 struct pinctrl_desc desc; 86 87 struct phy_provider *provider; 88 struct phy *phys[2]; 89 90 unsigned int enable; 91}; 92 93static inline void padctl_writel(struct tegra_xusb_padctl *padctl, u32 value, 94 unsigned long offset) 95{ 96 writel(value, padctl->regs + offset); 97} 98 99static inline u32 padctl_readl(struct tegra_xusb_padctl *padctl, 100 unsigned long offset) 101{ 102 return readl(padctl->regs + offset); 103} 104 105static int tegra_xusb_padctl_get_groups_count(struct pinctrl_dev *pinctrl) 106{ 107 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 108 109 return padctl->soc->num_pins; 110} 111 112static const char *tegra_xusb_padctl_get_group_name(struct pinctrl_dev *pinctrl, 113 unsigned int group) 114{ 115 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 116 117 return padctl->soc->pins[group].name; 118} 119 120static int tegra_xusb_padctl_get_group_pins(struct pinctrl_dev *pinctrl, 121 unsigned group, 122 const unsigned **pins, 123 unsigned *num_pins) 124{ 125 /* 126 * For the tegra-xusb pad controller groups are synonymous 127 * with lanes/pins and there is always one lane/pin per group. 128 */ 129 *pins = &pinctrl->desc->pins[group].number; 130 *num_pins = 1; 131 132 return 0; 133} 134 135enum tegra_xusb_padctl_param { 136 TEGRA_XUSB_PADCTL_IDDQ, 137}; 138 139static const struct tegra_xusb_padctl_property { 140 const char *name; 141 enum tegra_xusb_padctl_param param; 142} properties[] = { 143 { "nvidia,iddq", TEGRA_XUSB_PADCTL_IDDQ }, 144}; 145 146#define TEGRA_XUSB_PADCTL_PACK(param, value) ((param) << 16 | (value)) 147#define TEGRA_XUSB_PADCTL_UNPACK_PARAM(config) ((config) >> 16) 148#define TEGRA_XUSB_PADCTL_UNPACK_VALUE(config) ((config) & 0xffff) 149 150static int tegra_xusb_padctl_parse_subnode(struct tegra_xusb_padctl *padctl, 151 struct device_node *np, 152 struct pinctrl_map **maps, 153 unsigned int *reserved_maps, 154 unsigned int *num_maps) 155{ 156 unsigned int i, reserve = 0, num_configs = 0; 157 unsigned long config, *configs = NULL; 158 const char *function, *group; 159 struct property *prop; 160 int err = 0; 161 u32 value; 162 163 err = of_property_read_string(np, "nvidia,function", &function); 164 if (err < 0) { 165 if (err != -EINVAL) 166 return err; 167 168 function = NULL; 169 } 170 171 for (i = 0; i < ARRAY_SIZE(properties); i++) { 172 err = of_property_read_u32(np, properties[i].name, &value); 173 if (err < 0) { 174 if (err == -EINVAL) 175 continue; 176 177 goto out; 178 } 179 180 config = TEGRA_XUSB_PADCTL_PACK(properties[i].param, value); 181 182 err = pinctrl_utils_add_config(padctl->pinctrl, &configs, 183 &num_configs, config); 184 if (err < 0) 185 goto out; 186 } 187 188 if (function) 189 reserve++; 190 191 if (num_configs) 192 reserve++; 193 194 err = of_property_count_strings(np, "nvidia,lanes"); 195 if (err < 0) 196 goto out; 197 198 reserve *= err; 199 200 err = pinctrl_utils_reserve_map(padctl->pinctrl, maps, reserved_maps, 201 num_maps, reserve); 202 if (err < 0) 203 goto out; 204 205 of_property_for_each_string(np, "nvidia,lanes", prop, group) { 206 if (function) { 207 err = pinctrl_utils_add_map_mux(padctl->pinctrl, maps, 208 reserved_maps, num_maps, group, 209 function); 210 if (err < 0) 211 goto out; 212 } 213 214 if (num_configs) { 215 err = pinctrl_utils_add_map_configs(padctl->pinctrl, 216 maps, reserved_maps, num_maps, group, 217 configs, num_configs, 218 PIN_MAP_TYPE_CONFIGS_GROUP); 219 if (err < 0) 220 goto out; 221 } 222 } 223 224 err = 0; 225 226out: 227 kfree(configs); 228 return err; 229} 230 231static int tegra_xusb_padctl_dt_node_to_map(struct pinctrl_dev *pinctrl, 232 struct device_node *parent, 233 struct pinctrl_map **maps, 234 unsigned int *num_maps) 235{ 236 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 237 unsigned int reserved_maps = 0; 238 struct device_node *np; 239 int err; 240 241 *num_maps = 0; 242 *maps = NULL; 243 244 for_each_child_of_node(parent, np) { 245 err = tegra_xusb_padctl_parse_subnode(padctl, np, maps, 246 &reserved_maps, 247 num_maps); 248 if (err < 0) { 249 of_node_put(np); 250 return err; 251 } 252 } 253 254 return 0; 255} 256 257static const struct pinctrl_ops tegra_xusb_padctl_pinctrl_ops = { 258 .get_groups_count = tegra_xusb_padctl_get_groups_count, 259 .get_group_name = tegra_xusb_padctl_get_group_name, 260 .get_group_pins = tegra_xusb_padctl_get_group_pins, 261 .dt_node_to_map = tegra_xusb_padctl_dt_node_to_map, 262 .dt_free_map = pinctrl_utils_free_map, 263}; 264 265static int tegra_xusb_padctl_get_functions_count(struct pinctrl_dev *pinctrl) 266{ 267 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 268 269 return padctl->soc->num_functions; 270} 271 272static const char * 273tegra_xusb_padctl_get_function_name(struct pinctrl_dev *pinctrl, 274 unsigned int function) 275{ 276 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 277 278 return padctl->soc->functions[function].name; 279} 280 281static int tegra_xusb_padctl_get_function_groups(struct pinctrl_dev *pinctrl, 282 unsigned int function, 283 const char * const **groups, 284 unsigned * const num_groups) 285{ 286 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 287 288 *num_groups = padctl->soc->functions[function].num_groups; 289 *groups = padctl->soc->functions[function].groups; 290 291 return 0; 292} 293 294static int tegra_xusb_padctl_pinmux_set(struct pinctrl_dev *pinctrl, 295 unsigned int function, 296 unsigned int group) 297{ 298 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 299 const struct tegra_xusb_padctl_lane *lane; 300 unsigned int i; 301 u32 value; 302 303 lane = &padctl->soc->lanes[group]; 304 305 for (i = 0; i < lane->num_funcs; i++) 306 if (lane->funcs[i] == function) 307 break; 308 309 if (i >= lane->num_funcs) 310 return -EINVAL; 311 312 value = padctl_readl(padctl, lane->offset); 313 value &= ~(lane->mask << lane->shift); 314 value |= i << lane->shift; 315 padctl_writel(padctl, value, lane->offset); 316 317 return 0; 318} 319 320static const struct pinmux_ops tegra_xusb_padctl_pinmux_ops = { 321 .get_functions_count = tegra_xusb_padctl_get_functions_count, 322 .get_function_name = tegra_xusb_padctl_get_function_name, 323 .get_function_groups = tegra_xusb_padctl_get_function_groups, 324 .set_mux = tegra_xusb_padctl_pinmux_set, 325}; 326 327static int tegra_xusb_padctl_pinconf_group_get(struct pinctrl_dev *pinctrl, 328 unsigned int group, 329 unsigned long *config) 330{ 331 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 332 const struct tegra_xusb_padctl_lane *lane; 333 enum tegra_xusb_padctl_param param; 334 u32 value; 335 336 param = TEGRA_XUSB_PADCTL_UNPACK_PARAM(*config); 337 lane = &padctl->soc->lanes[group]; 338 339 switch (param) { 340 case TEGRA_XUSB_PADCTL_IDDQ: 341 /* lanes with iddq == 0 don't support this parameter */ 342 if (lane->iddq == 0) 343 return -EINVAL; 344 345 value = padctl_readl(padctl, lane->offset); 346 347 if (value & BIT(lane->iddq)) 348 value = 0; 349 else 350 value = 1; 351 352 *config = TEGRA_XUSB_PADCTL_PACK(param, value); 353 break; 354 355 default: 356 dev_err(padctl->dev, "invalid configuration parameter: %04x\n", 357 param); 358 return -ENOTSUPP; 359 } 360 361 return 0; 362} 363 364static int tegra_xusb_padctl_pinconf_group_set(struct pinctrl_dev *pinctrl, 365 unsigned int group, 366 unsigned long *configs, 367 unsigned int num_configs) 368{ 369 struct tegra_xusb_padctl *padctl = pinctrl_dev_get_drvdata(pinctrl); 370 const struct tegra_xusb_padctl_lane *lane; 371 enum tegra_xusb_padctl_param param; 372 unsigned long value; 373 unsigned int i; 374 u32 regval; 375 376 lane = &padctl->soc->lanes[group]; 377 378 for (i = 0; i < num_configs; i++) { 379 param = TEGRA_XUSB_PADCTL_UNPACK_PARAM(configs[i]); 380 value = TEGRA_XUSB_PADCTL_UNPACK_VALUE(configs[i]); 381 382 switch (param) { 383 case TEGRA_XUSB_PADCTL_IDDQ: 384 /* lanes with iddq == 0 don't support this parameter */ 385 if (lane->iddq == 0) 386 return -EINVAL; 387 388 regval = padctl_readl(padctl, lane->offset); 389 390 if (value) 391 regval &= ~BIT(lane->iddq); 392 else 393 regval |= BIT(lane->iddq); 394 395 padctl_writel(padctl, regval, lane->offset); 396 break; 397 398 default: 399 dev_err(padctl->dev, 400 "invalid configuration parameter: %04x\n", 401 param); 402 return -ENOTSUPP; 403 } 404 } 405 406 return 0; 407} 408 409#ifdef CONFIG_DEBUG_FS 410static const char *strip_prefix(const char *s) 411{ 412 const char *comma = strchr(s, ','); 413 if (!comma) 414 return s; 415 416 return comma + 1; 417} 418 419static void 420tegra_xusb_padctl_pinconf_group_dbg_show(struct pinctrl_dev *pinctrl, 421 struct seq_file *s, 422 unsigned int group) 423{ 424 unsigned int i; 425 426 for (i = 0; i < ARRAY_SIZE(properties); i++) { 427 unsigned long config, value; 428 int err; 429 430 config = TEGRA_XUSB_PADCTL_PACK(properties[i].param, 0); 431 432 err = tegra_xusb_padctl_pinconf_group_get(pinctrl, group, 433 &config); 434 if (err < 0) 435 continue; 436 437 value = TEGRA_XUSB_PADCTL_UNPACK_VALUE(config); 438 439 seq_printf(s, "\n\t%s=%lu\n", strip_prefix(properties[i].name), 440 value); 441 } 442} 443 444static void 445tegra_xusb_padctl_pinconf_config_dbg_show(struct pinctrl_dev *pinctrl, 446 struct seq_file *s, 447 unsigned long config) 448{ 449 enum tegra_xusb_padctl_param param; 450 const char *name = "unknown"; 451 unsigned long value; 452 unsigned int i; 453 454 param = TEGRA_XUSB_PADCTL_UNPACK_PARAM(config); 455 value = TEGRA_XUSB_PADCTL_UNPACK_VALUE(config); 456 457 for (i = 0; i < ARRAY_SIZE(properties); i++) { 458 if (properties[i].param == param) { 459 name = properties[i].name; 460 break; 461 } 462 } 463 464 seq_printf(s, "%s=%lu", strip_prefix(name), value); 465} 466#endif 467 468static const struct pinconf_ops tegra_xusb_padctl_pinconf_ops = { 469 .pin_config_group_get = tegra_xusb_padctl_pinconf_group_get, 470 .pin_config_group_set = tegra_xusb_padctl_pinconf_group_set, 471#ifdef CONFIG_DEBUG_FS 472 .pin_config_group_dbg_show = tegra_xusb_padctl_pinconf_group_dbg_show, 473 .pin_config_config_dbg_show = tegra_xusb_padctl_pinconf_config_dbg_show, 474#endif 475}; 476 477static int tegra_xusb_padctl_enable(struct tegra_xusb_padctl *padctl) 478{ 479 u32 value; 480 481 mutex_lock(&padctl->lock); 482 483 if (padctl->enable++ > 0) 484 goto out; 485 486 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 487 value &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN; 488 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 489 490 usleep_range(100, 200); 491 492 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 493 value &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN_EARLY; 494 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 495 496 usleep_range(100, 200); 497 498 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 499 value &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_VCORE_DOWN; 500 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 501 502out: 503 mutex_unlock(&padctl->lock); 504 return 0; 505} 506 507static int tegra_xusb_padctl_disable(struct tegra_xusb_padctl *padctl) 508{ 509 u32 value; 510 511 mutex_lock(&padctl->lock); 512 513 if (WARN_ON(padctl->enable == 0)) 514 goto out; 515 516 if (--padctl->enable > 0) 517 goto out; 518 519 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 520 value |= XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_VCORE_DOWN; 521 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 522 523 usleep_range(100, 200); 524 525 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 526 value |= XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN_EARLY; 527 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 528 529 usleep_range(100, 200); 530 531 value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM); 532 value |= XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN; 533 padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM); 534 535out: 536 mutex_unlock(&padctl->lock); 537 return 0; 538} 539 540static int tegra_xusb_phy_init(struct phy *phy) 541{ 542 struct tegra_xusb_padctl *padctl = phy_get_drvdata(phy); 543 544 return tegra_xusb_padctl_enable(padctl); 545} 546 547static int tegra_xusb_phy_exit(struct phy *phy) 548{ 549 struct tegra_xusb_padctl *padctl = phy_get_drvdata(phy); 550 551 return tegra_xusb_padctl_disable(padctl); 552} 553 554static int pcie_phy_power_on(struct phy *phy) 555{ 556 struct tegra_xusb_padctl *padctl = phy_get_drvdata(phy); 557 unsigned long timeout; 558 int err = -ETIMEDOUT; 559 u32 value; 560 561 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 562 value &= ~XUSB_PADCTL_IOPHY_PLL_P0_CTL1_REFCLK_SEL_MASK; 563 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 564 565 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_P0_CTL2); 566 value |= XUSB_PADCTL_IOPHY_PLL_P0_CTL2_REFCLKBUF_EN | 567 XUSB_PADCTL_IOPHY_PLL_P0_CTL2_TXCLKREF_EN | 568 XUSB_PADCTL_IOPHY_PLL_P0_CTL2_TXCLKREF_SEL; 569 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_P0_CTL2); 570 571 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 572 value |= XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL_RST; 573 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 574 575 timeout = jiffies + msecs_to_jiffies(50); 576 577 while (time_before(jiffies, timeout)) { 578 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 579 if (value & XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL0_LOCKDET) { 580 err = 0; 581 break; 582 } 583 584 usleep_range(100, 200); 585 } 586 587 return err; 588} 589 590static int pcie_phy_power_off(struct phy *phy) 591{ 592 struct tegra_xusb_padctl *padctl = phy_get_drvdata(phy); 593 u32 value; 594 595 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 596 value &= ~XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL_RST; 597 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_P0_CTL1); 598 599 return 0; 600} 601 602static const struct phy_ops pcie_phy_ops = { 603 .init = tegra_xusb_phy_init, 604 .exit = tegra_xusb_phy_exit, 605 .power_on = pcie_phy_power_on, 606 .power_off = pcie_phy_power_off, 607 .owner = THIS_MODULE, 608}; 609 610static int sata_phy_power_on(struct phy *phy) 611{ 612 struct tegra_xusb_padctl *padctl = phy_get_drvdata(phy); 613 unsigned long timeout; 614 int err = -ETIMEDOUT; 615 u32 value; 616 617 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1); 618 value &= ~XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1_IDDQ_OVRD; 619 value &= ~XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1_IDDQ; 620 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1); 621 622 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 623 value &= ~XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_PWR_OVRD; 624 value &= ~XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_IDDQ; 625 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 626 627 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 628 value |= XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL1_MODE; 629 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 630 631 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 632 value |= XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_RST; 633 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 634 635 timeout = jiffies + msecs_to_jiffies(50); 636 637 while (time_before(jiffies, timeout)) { 638 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 639 if (value & XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL1_LOCKDET) { 640 err = 0; 641 break; 642 } 643 644 usleep_range(100, 200); 645 } 646 647 return err; 648} 649 650static int sata_phy_power_off(struct phy *phy) 651{ 652 struct tegra_xusb_padctl *padctl = phy_get_drvdata(phy); 653 u32 value; 654 655 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 656 value &= ~XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_RST; 657 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 658 659 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 660 value &= ~XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL1_MODE; 661 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 662 663 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 664 value |= XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_PWR_OVRD; 665 value |= XUSB_PADCTL_IOPHY_PLL_S0_CTL1_PLL_IDDQ; 666 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_PLL_S0_CTL1); 667 668 value = padctl_readl(padctl, XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1); 669 value |= ~XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1_IDDQ_OVRD; 670 value |= ~XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1_IDDQ; 671 padctl_writel(padctl, value, XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL1); 672 673 return 0; 674} 675 676static const struct phy_ops sata_phy_ops = { 677 .init = tegra_xusb_phy_init, 678 .exit = tegra_xusb_phy_exit, 679 .power_on = sata_phy_power_on, 680 .power_off = sata_phy_power_off, 681 .owner = THIS_MODULE, 682}; 683 684static struct phy *tegra_xusb_padctl_xlate(struct device *dev, 685 struct of_phandle_args *args) 686{ 687 struct tegra_xusb_padctl *padctl = dev_get_drvdata(dev); 688 unsigned int index = args->args[0]; 689 690 if (args->args_count <= 0) 691 return ERR_PTR(-EINVAL); 692 693 if (index >= ARRAY_SIZE(padctl->phys)) 694 return ERR_PTR(-EINVAL); 695 696 return padctl->phys[index]; 697} 698 699#define PIN_OTG_0 0 700#define PIN_OTG_1 1 701#define PIN_OTG_2 2 702#define PIN_ULPI_0 3 703#define PIN_HSIC_0 4 704#define PIN_HSIC_1 5 705#define PIN_PCIE_0 6 706#define PIN_PCIE_1 7 707#define PIN_PCIE_2 8 708#define PIN_PCIE_3 9 709#define PIN_PCIE_4 10 710#define PIN_SATA_0 11 711 712static const struct pinctrl_pin_desc tegra124_pins[] = { 713 PINCTRL_PIN(PIN_OTG_0, "otg-0"), 714 PINCTRL_PIN(PIN_OTG_1, "otg-1"), 715 PINCTRL_PIN(PIN_OTG_2, "otg-2"), 716 PINCTRL_PIN(PIN_ULPI_0, "ulpi-0"), 717 PINCTRL_PIN(PIN_HSIC_0, "hsic-0"), 718 PINCTRL_PIN(PIN_HSIC_1, "hsic-1"), 719 PINCTRL_PIN(PIN_PCIE_0, "pcie-0"), 720 PINCTRL_PIN(PIN_PCIE_1, "pcie-1"), 721 PINCTRL_PIN(PIN_PCIE_2, "pcie-2"), 722 PINCTRL_PIN(PIN_PCIE_3, "pcie-3"), 723 PINCTRL_PIN(PIN_PCIE_4, "pcie-4"), 724 PINCTRL_PIN(PIN_SATA_0, "sata-0"), 725}; 726 727static const char * const tegra124_snps_groups[] = { 728 "otg-0", 729 "otg-1", 730 "otg-2", 731 "ulpi-0", 732 "hsic-0", 733 "hsic-1", 734}; 735 736static const char * const tegra124_xusb_groups[] = { 737 "otg-0", 738 "otg-1", 739 "otg-2", 740 "ulpi-0", 741 "hsic-0", 742 "hsic-1", 743}; 744 745static const char * const tegra124_uart_groups[] = { 746 "otg-0", 747 "otg-1", 748 "otg-2", 749}; 750 751static const char * const tegra124_pcie_groups[] = { 752 "pcie-0", 753 "pcie-1", 754 "pcie-2", 755 "pcie-3", 756 "pcie-4", 757}; 758 759static const char * const tegra124_usb3_groups[] = { 760 "pcie-0", 761 "pcie-1", 762 "sata-0", 763}; 764 765static const char * const tegra124_sata_groups[] = { 766 "sata-0", 767}; 768 769static const char * const tegra124_rsvd_groups[] = { 770 "otg-0", 771 "otg-1", 772 "otg-2", 773 "pcie-0", 774 "pcie-1", 775 "pcie-2", 776 "pcie-3", 777 "pcie-4", 778 "sata-0", 779}; 780 781#define TEGRA124_FUNCTION(_name) \ 782 { \ 783 .name = #_name, \ 784 .num_groups = ARRAY_SIZE(tegra124_##_name##_groups), \ 785 .groups = tegra124_##_name##_groups, \ 786 } 787 788static struct tegra_xusb_padctl_function tegra124_functions[] = { 789 TEGRA124_FUNCTION(snps), 790 TEGRA124_FUNCTION(xusb), 791 TEGRA124_FUNCTION(uart), 792 TEGRA124_FUNCTION(pcie), 793 TEGRA124_FUNCTION(usb3), 794 TEGRA124_FUNCTION(sata), 795 TEGRA124_FUNCTION(rsvd), 796}; 797 798enum tegra124_function { 799 TEGRA124_FUNC_SNPS, 800 TEGRA124_FUNC_XUSB, 801 TEGRA124_FUNC_UART, 802 TEGRA124_FUNC_PCIE, 803 TEGRA124_FUNC_USB3, 804 TEGRA124_FUNC_SATA, 805 TEGRA124_FUNC_RSVD, 806}; 807 808static const unsigned int tegra124_otg_functions[] = { 809 TEGRA124_FUNC_SNPS, 810 TEGRA124_FUNC_XUSB, 811 TEGRA124_FUNC_UART, 812 TEGRA124_FUNC_RSVD, 813}; 814 815static const unsigned int tegra124_usb_functions[] = { 816 TEGRA124_FUNC_SNPS, 817 TEGRA124_FUNC_XUSB, 818}; 819 820static const unsigned int tegra124_pci_functions[] = { 821 TEGRA124_FUNC_PCIE, 822 TEGRA124_FUNC_USB3, 823 TEGRA124_FUNC_SATA, 824 TEGRA124_FUNC_RSVD, 825}; 826 827#define TEGRA124_LANE(_name, _offset, _shift, _mask, _iddq, _funcs) \ 828 { \ 829 .name = _name, \ 830 .offset = _offset, \ 831 .shift = _shift, \ 832 .mask = _mask, \ 833 .iddq = _iddq, \ 834 .num_funcs = ARRAY_SIZE(tegra124_##_funcs##_functions), \ 835 .funcs = tegra124_##_funcs##_functions, \ 836 } 837 838static const struct tegra_xusb_padctl_lane tegra124_lanes[] = { 839 TEGRA124_LANE("otg-0", 0x004, 0, 0x3, 0, otg), 840 TEGRA124_LANE("otg-1", 0x004, 2, 0x3, 0, otg), 841 TEGRA124_LANE("otg-2", 0x004, 4, 0x3, 0, otg), 842 TEGRA124_LANE("ulpi-0", 0x004, 12, 0x1, 0, usb), 843 TEGRA124_LANE("hsic-0", 0x004, 14, 0x1, 0, usb), 844 TEGRA124_LANE("hsic-1", 0x004, 15, 0x1, 0, usb), 845 TEGRA124_LANE("pcie-0", 0x134, 16, 0x3, 1, pci), 846 TEGRA124_LANE("pcie-1", 0x134, 18, 0x3, 2, pci), 847 TEGRA124_LANE("pcie-2", 0x134, 20, 0x3, 3, pci), 848 TEGRA124_LANE("pcie-3", 0x134, 22, 0x3, 4, pci), 849 TEGRA124_LANE("pcie-4", 0x134, 24, 0x3, 5, pci), 850 TEGRA124_LANE("sata-0", 0x134, 26, 0x3, 6, pci), 851}; 852 853static const struct tegra_xusb_padctl_soc tegra124_soc = { 854 .num_pins = ARRAY_SIZE(tegra124_pins), 855 .pins = tegra124_pins, 856 .num_functions = ARRAY_SIZE(tegra124_functions), 857 .functions = tegra124_functions, 858 .num_lanes = ARRAY_SIZE(tegra124_lanes), 859 .lanes = tegra124_lanes, 860}; 861 862static const struct of_device_id tegra_xusb_padctl_of_match[] = { 863 { .compatible = "nvidia,tegra124-xusb-padctl", .data = &tegra124_soc }, 864 { } 865}; 866MODULE_DEVICE_TABLE(of, tegra_xusb_padctl_of_match); 867 868/* predeclare these in order to silence sparse */ 869int tegra_xusb_padctl_legacy_probe(struct platform_device *pdev); 870int tegra_xusb_padctl_legacy_remove(struct platform_device *pdev); 871 872int tegra_xusb_padctl_legacy_probe(struct platform_device *pdev) 873{ 874 struct tegra_xusb_padctl *padctl; 875 const struct of_device_id *match; 876 struct phy *phy; 877 int err; 878 879 padctl = devm_kzalloc(&pdev->dev, sizeof(*padctl), GFP_KERNEL); 880 if (!padctl) 881 return -ENOMEM; 882 883 platform_set_drvdata(pdev, padctl); 884 mutex_init(&padctl->lock); 885 padctl->dev = &pdev->dev; 886 887 /* 888 * Note that we can't replace this by of_device_get_match_data() 889 * because we need the separate matching table for this legacy code on 890 * Tegra124. of_device_get_match_data() would attempt to use the table 891 * from the updated driver and fail. 892 */ 893 match = of_match_node(tegra_xusb_padctl_of_match, pdev->dev.of_node); 894 padctl->soc = match->data; 895 896 padctl->regs = devm_platform_ioremap_resource(pdev, 0); 897 if (IS_ERR(padctl->regs)) 898 return PTR_ERR(padctl->regs); 899 900 padctl->rst = devm_reset_control_get_exclusive(&pdev->dev, NULL); 901 if (IS_ERR(padctl->rst)) 902 return PTR_ERR(padctl->rst); 903 904 err = reset_control_deassert(padctl->rst); 905 if (err < 0) 906 return err; 907 908 memset(&padctl->desc, 0, sizeof(padctl->desc)); 909 padctl->desc.name = dev_name(padctl->dev); 910 padctl->desc.pins = tegra124_pins; 911 padctl->desc.npins = ARRAY_SIZE(tegra124_pins); 912 padctl->desc.pctlops = &tegra_xusb_padctl_pinctrl_ops; 913 padctl->desc.pmxops = &tegra_xusb_padctl_pinmux_ops; 914 padctl->desc.confops = &tegra_xusb_padctl_pinconf_ops; 915 padctl->desc.owner = THIS_MODULE; 916 917 padctl->pinctrl = devm_pinctrl_register(&pdev->dev, &padctl->desc, 918 padctl); 919 if (IS_ERR(padctl->pinctrl)) { 920 dev_err(&pdev->dev, "failed to register pincontrol\n"); 921 err = PTR_ERR(padctl->pinctrl); 922 goto reset; 923 } 924 925 phy = devm_phy_create(&pdev->dev, NULL, &pcie_phy_ops); 926 if (IS_ERR(phy)) { 927 err = PTR_ERR(phy); 928 goto reset; 929 } 930 931 padctl->phys[TEGRA_XUSB_PADCTL_PCIE] = phy; 932 phy_set_drvdata(phy, padctl); 933 934 phy = devm_phy_create(&pdev->dev, NULL, &sata_phy_ops); 935 if (IS_ERR(phy)) { 936 err = PTR_ERR(phy); 937 goto reset; 938 } 939 940 padctl->phys[TEGRA_XUSB_PADCTL_SATA] = phy; 941 phy_set_drvdata(phy, padctl); 942 943 padctl->provider = devm_of_phy_provider_register(&pdev->dev, 944 tegra_xusb_padctl_xlate); 945 if (IS_ERR(padctl->provider)) { 946 err = PTR_ERR(padctl->provider); 947 dev_err(&pdev->dev, "failed to register PHYs: %d\n", err); 948 goto reset; 949 } 950 951 return 0; 952 953reset: 954 reset_control_assert(padctl->rst); 955 return err; 956} 957EXPORT_SYMBOL_GPL(tegra_xusb_padctl_legacy_probe); 958 959int tegra_xusb_padctl_legacy_remove(struct platform_device *pdev) 960{ 961 struct tegra_xusb_padctl *padctl = platform_get_drvdata(pdev); 962 int err; 963 964 err = reset_control_assert(padctl->rst); 965 if (err < 0) 966 dev_err(&pdev->dev, "failed to assert reset: %d\n", err); 967 968 return err; 969} 970EXPORT_SYMBOL_GPL(tegra_xusb_padctl_legacy_remove);