linux/drivers/phy/tegra/xusb.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2014-2016, NVIDIA CORPORATION.  All rights reserved.
   4 */
   5
   6#include <linux/delay.h>
   7#include <linux/io.h>
   8#include <linux/mailbox_client.h>
   9#include <linux/module.h>
  10#include <linux/of.h>
  11#include <linux/of_device.h>
  12#include <linux/phy/phy.h>
  13#include <linux/phy/tegra/xusb.h>
  14#include <linux/platform_device.h>
  15#include <linux/regulator/consumer.h>
  16#include <linux/reset.h>
  17#include <linux/slab.h>
  18#include <linux/workqueue.h>
  19
  20#include <soc/tegra/fuse.h>
  21
  22#include "xusb.h"
  23
  24static struct phy *tegra_xusb_pad_of_xlate(struct device *dev,
  25                                           struct of_phandle_args *args)
  26{
  27        struct tegra_xusb_pad *pad = dev_get_drvdata(dev);
  28        struct phy *phy = NULL;
  29        unsigned int i;
  30
  31        if (args->args_count != 0)
  32                return ERR_PTR(-EINVAL);
  33
  34        for (i = 0; i < pad->soc->num_lanes; i++) {
  35                if (!pad->lanes[i])
  36                        continue;
  37
  38                if (pad->lanes[i]->dev.of_node == args->np) {
  39                        phy = pad->lanes[i];
  40                        break;
  41                }
  42        }
  43
  44        if (phy == NULL)
  45                phy = ERR_PTR(-ENODEV);
  46
  47        return phy;
  48}
  49
  50static const struct of_device_id tegra_xusb_padctl_of_match[] = {
  51#if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
  52        {
  53                .compatible = "nvidia,tegra124-xusb-padctl",
  54                .data = &tegra124_xusb_padctl_soc,
  55        },
  56#endif
  57#if defined(CONFIG_ARCH_TEGRA_210_SOC)
  58        {
  59                .compatible = "nvidia,tegra210-xusb-padctl",
  60                .data = &tegra210_xusb_padctl_soc,
  61        },
  62#endif
  63#if defined(CONFIG_ARCH_TEGRA_186_SOC)
  64        {
  65                .compatible = "nvidia,tegra186-xusb-padctl",
  66                .data = &tegra186_xusb_padctl_soc,
  67        },
  68#endif
  69#if defined(CONFIG_ARCH_TEGRA_194_SOC)
  70        {
  71                .compatible = "nvidia,tegra194-xusb-padctl",
  72                .data = &tegra194_xusb_padctl_soc,
  73        },
  74#endif
  75        { }
  76};
  77MODULE_DEVICE_TABLE(of, tegra_xusb_padctl_of_match);
  78
  79static struct device_node *
  80tegra_xusb_find_pad_node(struct tegra_xusb_padctl *padctl, const char *name)
  81{
  82        struct device_node *pads, *np;
  83
  84        pads = of_get_child_by_name(padctl->dev->of_node, "pads");
  85        if (!pads)
  86                return NULL;
  87
  88        np = of_get_child_by_name(pads, name);
  89        of_node_put(pads);
  90
  91        return np;
  92}
  93
  94static struct device_node *
  95tegra_xusb_pad_find_phy_node(struct tegra_xusb_pad *pad, unsigned int index)
  96{
  97        struct device_node *np, *lanes;
  98
  99        lanes = of_get_child_by_name(pad->dev.of_node, "lanes");
 100        if (!lanes)
 101                return NULL;
 102
 103        np = of_get_child_by_name(lanes, pad->soc->lanes[index].name);
 104        of_node_put(lanes);
 105
 106        return np;
 107}
 108
 109int tegra_xusb_lane_parse_dt(struct tegra_xusb_lane *lane,
 110                             struct device_node *np)
 111{
 112        struct device *dev = &lane->pad->dev;
 113        const char *function;
 114        int err;
 115
 116        err = of_property_read_string(np, "nvidia,function", &function);
 117        if (err < 0)
 118                return err;
 119
 120        err = match_string(lane->soc->funcs, lane->soc->num_funcs, function);
 121        if (err < 0) {
 122                dev_err(dev, "invalid function \"%s\" for lane \"%pOFn\"\n",
 123                        function, np);
 124                return err;
 125        }
 126
 127        lane->function = err;
 128
 129        return 0;
 130}
 131
 132static void tegra_xusb_lane_destroy(struct phy *phy)
 133{
 134        if (phy) {
 135                struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
 136
 137                lane->pad->ops->remove(lane);
 138                phy_destroy(phy);
 139        }
 140}
 141
 142static void tegra_xusb_pad_release(struct device *dev)
 143{
 144        struct tegra_xusb_pad *pad = to_tegra_xusb_pad(dev);
 145
 146        pad->soc->ops->remove(pad);
 147}
 148
 149static const struct device_type tegra_xusb_pad_type = {
 150        .release = tegra_xusb_pad_release,
 151};
 152
 153int tegra_xusb_pad_init(struct tegra_xusb_pad *pad,
 154                        struct tegra_xusb_padctl *padctl,
 155                        struct device_node *np)
 156{
 157        int err;
 158
 159        device_initialize(&pad->dev);
 160        INIT_LIST_HEAD(&pad->list);
 161        pad->dev.parent = padctl->dev;
 162        pad->dev.type = &tegra_xusb_pad_type;
 163        pad->dev.of_node = np;
 164        pad->padctl = padctl;
 165
 166        err = dev_set_name(&pad->dev, "%s", pad->soc->name);
 167        if (err < 0)
 168                goto unregister;
 169
 170        err = device_add(&pad->dev);
 171        if (err < 0)
 172                goto unregister;
 173
 174        return 0;
 175
 176unregister:
 177        device_unregister(&pad->dev);
 178        return err;
 179}
 180
 181int tegra_xusb_pad_register(struct tegra_xusb_pad *pad,
 182                            const struct phy_ops *ops)
 183{
 184        struct device_node *children;
 185        struct phy *lane;
 186        unsigned int i;
 187        int err;
 188
 189        children = of_get_child_by_name(pad->dev.of_node, "lanes");
 190        if (!children)
 191                return -ENODEV;
 192
 193        pad->lanes = devm_kcalloc(&pad->dev, pad->soc->num_lanes, sizeof(lane),
 194                                  GFP_KERNEL);
 195        if (!pad->lanes) {
 196                of_node_put(children);
 197                return -ENOMEM;
 198        }
 199
 200        for (i = 0; i < pad->soc->num_lanes; i++) {
 201                struct device_node *np = tegra_xusb_pad_find_phy_node(pad, i);
 202                struct tegra_xusb_lane *lane;
 203
 204                /* skip disabled lanes */
 205                if (!np || !of_device_is_available(np)) {
 206                        of_node_put(np);
 207                        continue;
 208                }
 209
 210                pad->lanes[i] = phy_create(&pad->dev, np, ops);
 211                if (IS_ERR(pad->lanes[i])) {
 212                        err = PTR_ERR(pad->lanes[i]);
 213                        of_node_put(np);
 214                        goto remove;
 215                }
 216
 217                lane = pad->ops->probe(pad, np, i);
 218                if (IS_ERR(lane)) {
 219                        phy_destroy(pad->lanes[i]);
 220                        err = PTR_ERR(lane);
 221                        goto remove;
 222                }
 223
 224                list_add_tail(&lane->list, &pad->padctl->lanes);
 225                phy_set_drvdata(pad->lanes[i], lane);
 226        }
 227
 228        pad->provider = of_phy_provider_register_full(&pad->dev, children,
 229                                                      tegra_xusb_pad_of_xlate);
 230        if (IS_ERR(pad->provider)) {
 231                err = PTR_ERR(pad->provider);
 232                goto remove;
 233        }
 234
 235        return 0;
 236
 237remove:
 238        while (i--)
 239                tegra_xusb_lane_destroy(pad->lanes[i]);
 240
 241        of_node_put(children);
 242
 243        return err;
 244}
 245
 246void tegra_xusb_pad_unregister(struct tegra_xusb_pad *pad)
 247{
 248        unsigned int i = pad->soc->num_lanes;
 249
 250        of_phy_provider_unregister(pad->provider);
 251
 252        while (i--)
 253                tegra_xusb_lane_destroy(pad->lanes[i]);
 254
 255        device_unregister(&pad->dev);
 256}
 257
 258static struct tegra_xusb_pad *
 259tegra_xusb_pad_create(struct tegra_xusb_padctl *padctl,
 260                      const struct tegra_xusb_pad_soc *soc)
 261{
 262        struct tegra_xusb_pad *pad;
 263        struct device_node *np;
 264        int err;
 265
 266        np = tegra_xusb_find_pad_node(padctl, soc->name);
 267        if (!np || !of_device_is_available(np))
 268                return NULL;
 269
 270        pad = soc->ops->probe(padctl, soc, np);
 271        if (IS_ERR(pad)) {
 272                err = PTR_ERR(pad);
 273                dev_err(padctl->dev, "failed to create pad %s: %d\n",
 274                        soc->name, err);
 275                return ERR_PTR(err);
 276        }
 277
 278        /* XXX move this into ->probe() to avoid string comparison */
 279        if (strcmp(soc->name, "pcie") == 0)
 280                padctl->pcie = pad;
 281
 282        if (strcmp(soc->name, "sata") == 0)
 283                padctl->sata = pad;
 284
 285        if (strcmp(soc->name, "usb2") == 0)
 286                padctl->usb2 = pad;
 287
 288        if (strcmp(soc->name, "ulpi") == 0)
 289                padctl->ulpi = pad;
 290
 291        if (strcmp(soc->name, "hsic") == 0)
 292                padctl->hsic = pad;
 293
 294        return pad;
 295}
 296
 297static void __tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl)
 298{
 299        struct tegra_xusb_pad *pad, *tmp;
 300
 301        list_for_each_entry_safe_reverse(pad, tmp, &padctl->pads, list) {
 302                list_del(&pad->list);
 303                tegra_xusb_pad_unregister(pad);
 304        }
 305}
 306
 307static void tegra_xusb_remove_pads(struct tegra_xusb_padctl *padctl)
 308{
 309        mutex_lock(&padctl->lock);
 310        __tegra_xusb_remove_pads(padctl);
 311        mutex_unlock(&padctl->lock);
 312}
 313
 314static void tegra_xusb_lane_program(struct tegra_xusb_lane *lane)
 315{
 316        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
 317        const struct tegra_xusb_lane_soc *soc = lane->soc;
 318        u32 value;
 319
 320        /* skip single function lanes */
 321        if (soc->num_funcs < 2)
 322                return;
 323
 324        /* choose function */
 325        value = padctl_readl(padctl, soc->offset);
 326        value &= ~(soc->mask << soc->shift);
 327        value |= lane->function << soc->shift;
 328        padctl_writel(padctl, value, soc->offset);
 329}
 330
 331static void tegra_xusb_pad_program(struct tegra_xusb_pad *pad)
 332{
 333        unsigned int i;
 334
 335        for (i = 0; i < pad->soc->num_lanes; i++) {
 336                struct tegra_xusb_lane *lane;
 337
 338                if (pad->lanes[i]) {
 339                        lane = phy_get_drvdata(pad->lanes[i]);
 340                        tegra_xusb_lane_program(lane);
 341                }
 342        }
 343}
 344
 345static int tegra_xusb_setup_pads(struct tegra_xusb_padctl *padctl)
 346{
 347        struct tegra_xusb_pad *pad;
 348        unsigned int i;
 349
 350        mutex_lock(&padctl->lock);
 351
 352        for (i = 0; i < padctl->soc->num_pads; i++) {
 353                const struct tegra_xusb_pad_soc *soc = padctl->soc->pads[i];
 354                int err;
 355
 356                pad = tegra_xusb_pad_create(padctl, soc);
 357                if (IS_ERR(pad)) {
 358                        err = PTR_ERR(pad);
 359                        dev_err(padctl->dev, "failed to create pad %s: %d\n",
 360                                soc->name, err);
 361                        __tegra_xusb_remove_pads(padctl);
 362                        mutex_unlock(&padctl->lock);
 363                        return err;
 364                }
 365
 366                if (!pad)
 367                        continue;
 368
 369                list_add_tail(&pad->list, &padctl->pads);
 370        }
 371
 372        list_for_each_entry(pad, &padctl->pads, list)
 373                tegra_xusb_pad_program(pad);
 374
 375        mutex_unlock(&padctl->lock);
 376        return 0;
 377}
 378
 379static bool tegra_xusb_lane_check(struct tegra_xusb_lane *lane,
 380                                  const char *function)
 381{
 382        const char *func = lane->soc->funcs[lane->function];
 383
 384        return strcmp(function, func) == 0;
 385}
 386
 387struct tegra_xusb_lane *tegra_xusb_find_lane(struct tegra_xusb_padctl *padctl,
 388                                             const char *type,
 389                                             unsigned int index)
 390{
 391        struct tegra_xusb_lane *lane, *hit = ERR_PTR(-ENODEV);
 392        char *name;
 393
 394        name = kasprintf(GFP_KERNEL, "%s-%u", type, index);
 395        if (!name)
 396                return ERR_PTR(-ENOMEM);
 397
 398        list_for_each_entry(lane, &padctl->lanes, list) {
 399                if (strcmp(lane->soc->name, name) == 0) {
 400                        hit = lane;
 401                        break;
 402                }
 403        }
 404
 405        kfree(name);
 406        return hit;
 407}
 408
 409struct tegra_xusb_lane *
 410tegra_xusb_port_find_lane(struct tegra_xusb_port *port,
 411                          const struct tegra_xusb_lane_map *map,
 412                          const char *function)
 413{
 414        struct tegra_xusb_lane *lane, *match = ERR_PTR(-ENODEV);
 415
 416        for (; map->type; map++) {
 417                if (port->index != map->port)
 418                        continue;
 419
 420                lane = tegra_xusb_find_lane(port->padctl, map->type,
 421                                            map->index);
 422                if (IS_ERR(lane))
 423                        continue;
 424
 425                if (!tegra_xusb_lane_check(lane, function))
 426                        continue;
 427
 428                if (!IS_ERR(match))
 429                        dev_err(&port->dev, "conflicting match: %s-%u / %s\n",
 430                                map->type, map->index, match->soc->name);
 431                else
 432                        match = lane;
 433        }
 434
 435        return match;
 436}
 437
 438static struct device_node *
 439tegra_xusb_find_port_node(struct tegra_xusb_padctl *padctl, const char *type,
 440                          unsigned int index)
 441{
 442        struct device_node *ports, *np;
 443        char *name;
 444
 445        ports = of_get_child_by_name(padctl->dev->of_node, "ports");
 446        if (!ports)
 447                return NULL;
 448
 449        name = kasprintf(GFP_KERNEL, "%s-%u", type, index);
 450        if (!name) {
 451                of_node_put(ports);
 452                return ERR_PTR(-ENOMEM);
 453        }
 454        np = of_get_child_by_name(ports, name);
 455        kfree(name);
 456        of_node_put(ports);
 457
 458        return np;
 459}
 460
 461struct tegra_xusb_port *
 462tegra_xusb_find_port(struct tegra_xusb_padctl *padctl, const char *type,
 463                     unsigned int index)
 464{
 465        struct tegra_xusb_port *port;
 466        struct device_node *np;
 467
 468        np = tegra_xusb_find_port_node(padctl, type, index);
 469        if (!np)
 470                return NULL;
 471
 472        list_for_each_entry(port, &padctl->ports, list) {
 473                if (np == port->dev.of_node) {
 474                        of_node_put(np);
 475                        return port;
 476                }
 477        }
 478
 479        of_node_put(np);
 480
 481        return NULL;
 482}
 483
 484struct tegra_xusb_usb2_port *
 485tegra_xusb_find_usb2_port(struct tegra_xusb_padctl *padctl, unsigned int index)
 486{
 487        struct tegra_xusb_port *port;
 488
 489        port = tegra_xusb_find_port(padctl, "usb2", index);
 490        if (port)
 491                return to_usb2_port(port);
 492
 493        return NULL;
 494}
 495
 496struct tegra_xusb_usb3_port *
 497tegra_xusb_find_usb3_port(struct tegra_xusb_padctl *padctl, unsigned int index)
 498{
 499        struct tegra_xusb_port *port;
 500
 501        port = tegra_xusb_find_port(padctl, "usb3", index);
 502        if (port)
 503                return to_usb3_port(port);
 504
 505        return NULL;
 506}
 507
 508static void tegra_xusb_port_release(struct device *dev)
 509{
 510        struct tegra_xusb_port *port = to_tegra_xusb_port(dev);
 511
 512        if (port->ops->release)
 513                port->ops->release(port);
 514}
 515
 516static const struct device_type tegra_xusb_port_type = {
 517        .release = tegra_xusb_port_release,
 518};
 519
 520static int tegra_xusb_port_init(struct tegra_xusb_port *port,
 521                                struct tegra_xusb_padctl *padctl,
 522                                struct device_node *np,
 523                                const char *name,
 524                                unsigned int index)
 525{
 526        int err;
 527
 528        INIT_LIST_HEAD(&port->list);
 529        port->padctl = padctl;
 530        port->index = index;
 531
 532        device_initialize(&port->dev);
 533        port->dev.type = &tegra_xusb_port_type;
 534        port->dev.of_node = of_node_get(np);
 535        port->dev.parent = padctl->dev;
 536
 537        err = dev_set_name(&port->dev, "%s-%u", name, index);
 538        if (err < 0)
 539                goto unregister;
 540
 541        err = device_add(&port->dev);
 542        if (err < 0)
 543                goto unregister;
 544
 545        return 0;
 546
 547unregister:
 548        device_unregister(&port->dev);
 549        return err;
 550}
 551
 552static void tegra_xusb_port_unregister(struct tegra_xusb_port *port)
 553{
 554        if (!IS_ERR_OR_NULL(port->usb_role_sw)) {
 555                of_platform_depopulate(&port->dev);
 556                usb_role_switch_unregister(port->usb_role_sw);
 557                cancel_work_sync(&port->usb_phy_work);
 558                usb_remove_phy(&port->usb_phy);
 559        }
 560
 561        if (port->ops->remove)
 562                port->ops->remove(port);
 563
 564        device_unregister(&port->dev);
 565}
 566
 567static const char *const modes[] = {
 568        [USB_DR_MODE_UNKNOWN] = "",
 569        [USB_DR_MODE_HOST] = "host",
 570        [USB_DR_MODE_PERIPHERAL] = "peripheral",
 571        [USB_DR_MODE_OTG] = "otg",
 572};
 573
 574static const char * const usb_roles[] = {
 575        [USB_ROLE_NONE]         = "none",
 576        [USB_ROLE_HOST]         = "host",
 577        [USB_ROLE_DEVICE]       = "device",
 578};
 579
 580static enum usb_phy_events to_usb_phy_event(enum usb_role role)
 581{
 582        switch (role) {
 583        case USB_ROLE_DEVICE:
 584                return USB_EVENT_VBUS;
 585
 586        case USB_ROLE_HOST:
 587                return USB_EVENT_ID;
 588
 589        default:
 590                return USB_EVENT_NONE;
 591        }
 592}
 593
 594static void tegra_xusb_usb_phy_work(struct work_struct *work)
 595{
 596        struct tegra_xusb_port *port = container_of(work,
 597                                                    struct tegra_xusb_port,
 598                                                    usb_phy_work);
 599        enum usb_role role = usb_role_switch_get_role(port->usb_role_sw);
 600
 601        usb_phy_set_event(&port->usb_phy, to_usb_phy_event(role));
 602
 603        dev_dbg(&port->dev, "%s(): calling notifier for role %s\n", __func__,
 604                usb_roles[role]);
 605
 606        atomic_notifier_call_chain(&port->usb_phy.notifier, 0, &port->usb_phy);
 607}
 608
 609static int tegra_xusb_role_sw_set(struct usb_role_switch *sw,
 610                                  enum usb_role role)
 611{
 612        struct tegra_xusb_port *port = usb_role_switch_get_drvdata(sw);
 613
 614        dev_dbg(&port->dev, "%s(): role %s\n", __func__, usb_roles[role]);
 615
 616        schedule_work(&port->usb_phy_work);
 617
 618        return 0;
 619}
 620
 621static int tegra_xusb_set_peripheral(struct usb_otg *otg,
 622                                     struct usb_gadget *gadget)
 623{
 624        struct tegra_xusb_port *port = container_of(otg->usb_phy,
 625                                                    struct tegra_xusb_port,
 626                                                    usb_phy);
 627
 628        if (gadget != NULL)
 629                schedule_work(&port->usb_phy_work);
 630
 631        return 0;
 632}
 633
 634static int tegra_xusb_set_host(struct usb_otg *otg, struct usb_bus *host)
 635{
 636        struct tegra_xusb_port *port = container_of(otg->usb_phy,
 637                                                    struct tegra_xusb_port,
 638                                                    usb_phy);
 639
 640        if (host != NULL)
 641                schedule_work(&port->usb_phy_work);
 642
 643        return 0;
 644}
 645
 646
 647static int tegra_xusb_setup_usb_role_switch(struct tegra_xusb_port *port)
 648{
 649        struct tegra_xusb_lane *lane;
 650        struct usb_role_switch_desc role_sx_desc = {
 651                .fwnode = dev_fwnode(&port->dev),
 652                .set = tegra_xusb_role_sw_set,
 653        };
 654        int err = 0;
 655
 656        /*
 657         * USB role switch driver needs parent driver owner info. This is a
 658         * suboptimal solution. TODO: Need to revisit this in a follow-up patch
 659         * where an optimal solution is possible with changes to USB role
 660         * switch driver.
 661         */
 662        port->dev.driver = devm_kzalloc(&port->dev,
 663                                        sizeof(struct device_driver),
 664                                        GFP_KERNEL);
 665        port->dev.driver->owner  = THIS_MODULE;
 666
 667        port->usb_role_sw = usb_role_switch_register(&port->dev,
 668                                                     &role_sx_desc);
 669        if (IS_ERR(port->usb_role_sw)) {
 670                err = PTR_ERR(port->usb_role_sw);
 671                dev_err(&port->dev, "failed to register USB role switch: %d",
 672                        err);
 673                return err;
 674        }
 675
 676        INIT_WORK(&port->usb_phy_work, tegra_xusb_usb_phy_work);
 677        usb_role_switch_set_drvdata(port->usb_role_sw, port);
 678
 679        port->usb_phy.otg = devm_kzalloc(&port->dev, sizeof(struct usb_otg),
 680                                         GFP_KERNEL);
 681        if (!port->usb_phy.otg)
 682                return -ENOMEM;
 683
 684        lane = tegra_xusb_find_lane(port->padctl, "usb2", port->index);
 685
 686        /*
 687         * Assign phy dev to usb-phy dev. Host/device drivers can use phy
 688         * reference to retrieve usb-phy details.
 689         */
 690        port->usb_phy.dev = &lane->pad->lanes[port->index]->dev;
 691        port->usb_phy.dev->driver = port->dev.driver;
 692        port->usb_phy.otg->usb_phy = &port->usb_phy;
 693        port->usb_phy.otg->set_peripheral = tegra_xusb_set_peripheral;
 694        port->usb_phy.otg->set_host = tegra_xusb_set_host;
 695
 696        err = usb_add_phy_dev(&port->usb_phy);
 697        if (err < 0) {
 698                dev_err(&port->dev, "Failed to add USB PHY: %d\n", err);
 699                return err;
 700        }
 701
 702        /* populate connector entry */
 703        of_platform_populate(port->dev.of_node, NULL, NULL, &port->dev);
 704
 705        return err;
 706}
 707
 708static int tegra_xusb_usb2_port_parse_dt(struct tegra_xusb_usb2_port *usb2)
 709{
 710        struct tegra_xusb_port *port = &usb2->base;
 711        struct device_node *np = port->dev.of_node;
 712        const char *mode;
 713        int err;
 714
 715        usb2->internal = of_property_read_bool(np, "nvidia,internal");
 716
 717        if (!of_property_read_string(np, "mode", &mode)) {
 718                int err = match_string(modes, ARRAY_SIZE(modes), mode);
 719                if (err < 0) {
 720                        dev_err(&port->dev, "invalid value %s for \"mode\"\n",
 721                                mode);
 722                        usb2->mode = USB_DR_MODE_UNKNOWN;
 723                } else {
 724                        usb2->mode = err;
 725                }
 726        } else {
 727                usb2->mode = USB_DR_MODE_HOST;
 728        }
 729
 730        /* usb-role-switch property is mandatory for OTG/Peripheral modes */
 731        if (usb2->mode == USB_DR_MODE_PERIPHERAL ||
 732            usb2->mode == USB_DR_MODE_OTG) {
 733                if (of_property_read_bool(np, "usb-role-switch")) {
 734                        err = tegra_xusb_setup_usb_role_switch(port);
 735                        if (err < 0)
 736                                return err;
 737                } else {
 738                        dev_err(&port->dev, "usb-role-switch not found for %s mode",
 739                                modes[usb2->mode]);
 740                        return -EINVAL;
 741                }
 742        }
 743
 744        usb2->supply = regulator_get(&port->dev, "vbus");
 745        return PTR_ERR_OR_ZERO(usb2->supply);
 746}
 747
 748static int tegra_xusb_add_usb2_port(struct tegra_xusb_padctl *padctl,
 749                                    unsigned int index)
 750{
 751        struct tegra_xusb_usb2_port *usb2;
 752        struct device_node *np;
 753        int err = 0;
 754
 755        /*
 756         * USB2 ports don't require additional properties, but if the port is
 757         * marked as disabled there is no reason to register it.
 758         */
 759        np = tegra_xusb_find_port_node(padctl, "usb2", index);
 760        if (!np || !of_device_is_available(np))
 761                goto out;
 762
 763        usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
 764        if (!usb2) {
 765                err = -ENOMEM;
 766                goto out;
 767        }
 768
 769        err = tegra_xusb_port_init(&usb2->base, padctl, np, "usb2", index);
 770        if (err < 0)
 771                goto out;
 772
 773        usb2->base.ops = padctl->soc->ports.usb2.ops;
 774
 775        usb2->base.lane = usb2->base.ops->map(&usb2->base);
 776        if (IS_ERR(usb2->base.lane)) {
 777                err = PTR_ERR(usb2->base.lane);
 778                goto out;
 779        }
 780
 781        err = tegra_xusb_usb2_port_parse_dt(usb2);
 782        if (err < 0) {
 783                tegra_xusb_port_unregister(&usb2->base);
 784                goto out;
 785        }
 786
 787        list_add_tail(&usb2->base.list, &padctl->ports);
 788
 789out:
 790        of_node_put(np);
 791        return err;
 792}
 793
 794void tegra_xusb_usb2_port_release(struct tegra_xusb_port *port)
 795{
 796        struct tegra_xusb_usb2_port *usb2 = to_usb2_port(port);
 797
 798        kfree(usb2);
 799}
 800
 801void tegra_xusb_usb2_port_remove(struct tegra_xusb_port *port)
 802{
 803        struct tegra_xusb_usb2_port *usb2 = to_usb2_port(port);
 804
 805        regulator_put(usb2->supply);
 806}
 807
 808static int tegra_xusb_ulpi_port_parse_dt(struct tegra_xusb_ulpi_port *ulpi)
 809{
 810        struct tegra_xusb_port *port = &ulpi->base;
 811        struct device_node *np = port->dev.of_node;
 812
 813        ulpi->internal = of_property_read_bool(np, "nvidia,internal");
 814
 815        return 0;
 816}
 817
 818static int tegra_xusb_add_ulpi_port(struct tegra_xusb_padctl *padctl,
 819                                    unsigned int index)
 820{
 821        struct tegra_xusb_ulpi_port *ulpi;
 822        struct device_node *np;
 823        int err = 0;
 824
 825        np = tegra_xusb_find_port_node(padctl, "ulpi", index);
 826        if (!np || !of_device_is_available(np))
 827                goto out;
 828
 829        ulpi = kzalloc(sizeof(*ulpi), GFP_KERNEL);
 830        if (!ulpi) {
 831                err = -ENOMEM;
 832                goto out;
 833        }
 834
 835        err = tegra_xusb_port_init(&ulpi->base, padctl, np, "ulpi", index);
 836        if (err < 0)
 837                goto out;
 838
 839        ulpi->base.ops = padctl->soc->ports.ulpi.ops;
 840
 841        ulpi->base.lane = ulpi->base.ops->map(&ulpi->base);
 842        if (IS_ERR(ulpi->base.lane)) {
 843                err = PTR_ERR(ulpi->base.lane);
 844                goto out;
 845        }
 846
 847        err = tegra_xusb_ulpi_port_parse_dt(ulpi);
 848        if (err < 0) {
 849                tegra_xusb_port_unregister(&ulpi->base);
 850                goto out;
 851        }
 852
 853        list_add_tail(&ulpi->base.list, &padctl->ports);
 854
 855out:
 856        of_node_put(np);
 857        return err;
 858}
 859
 860void tegra_xusb_ulpi_port_release(struct tegra_xusb_port *port)
 861{
 862        struct tegra_xusb_ulpi_port *ulpi = to_ulpi_port(port);
 863
 864        kfree(ulpi);
 865}
 866
 867static int tegra_xusb_hsic_port_parse_dt(struct tegra_xusb_hsic_port *hsic)
 868{
 869        /* XXX */
 870        return 0;
 871}
 872
 873static int tegra_xusb_add_hsic_port(struct tegra_xusb_padctl *padctl,
 874                                    unsigned int index)
 875{
 876        struct tegra_xusb_hsic_port *hsic;
 877        struct device_node *np;
 878        int err = 0;
 879
 880        np = tegra_xusb_find_port_node(padctl, "hsic", index);
 881        if (!np || !of_device_is_available(np))
 882                goto out;
 883
 884        hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
 885        if (!hsic) {
 886                err = -ENOMEM;
 887                goto out;
 888        }
 889
 890        err = tegra_xusb_port_init(&hsic->base, padctl, np, "hsic", index);
 891        if (err < 0)
 892                goto out;
 893
 894        hsic->base.ops = padctl->soc->ports.hsic.ops;
 895
 896        hsic->base.lane = hsic->base.ops->map(&hsic->base);
 897        if (IS_ERR(hsic->base.lane)) {
 898                err = PTR_ERR(hsic->base.lane);
 899                goto out;
 900        }
 901
 902        err = tegra_xusb_hsic_port_parse_dt(hsic);
 903        if (err < 0) {
 904                tegra_xusb_port_unregister(&hsic->base);
 905                goto out;
 906        }
 907
 908        list_add_tail(&hsic->base.list, &padctl->ports);
 909
 910out:
 911        of_node_put(np);
 912        return err;
 913}
 914
 915void tegra_xusb_hsic_port_release(struct tegra_xusb_port *port)
 916{
 917        struct tegra_xusb_hsic_port *hsic = to_hsic_port(port);
 918
 919        kfree(hsic);
 920}
 921
 922static int tegra_xusb_usb3_port_parse_dt(struct tegra_xusb_usb3_port *usb3)
 923{
 924        struct tegra_xusb_port *port = &usb3->base;
 925        struct device_node *np = port->dev.of_node;
 926        enum usb_device_speed maximum_speed;
 927        u32 value;
 928        int err;
 929
 930        err = of_property_read_u32(np, "nvidia,usb2-companion", &value);
 931        if (err < 0) {
 932                dev_err(&port->dev, "failed to read port: %d\n", err);
 933                return err;
 934        }
 935
 936        usb3->port = value;
 937
 938        usb3->internal = of_property_read_bool(np, "nvidia,internal");
 939
 940        if (device_property_present(&port->dev, "maximum-speed")) {
 941                maximum_speed =  usb_get_maximum_speed(&port->dev);
 942                if (maximum_speed == USB_SPEED_SUPER)
 943                        usb3->disable_gen2 = true;
 944                else if (maximum_speed == USB_SPEED_SUPER_PLUS)
 945                        usb3->disable_gen2 = false;
 946                else
 947                        return -EINVAL;
 948        }
 949
 950        usb3->supply = regulator_get(&port->dev, "vbus");
 951        return PTR_ERR_OR_ZERO(usb3->supply);
 952}
 953
 954static int tegra_xusb_add_usb3_port(struct tegra_xusb_padctl *padctl,
 955                                    unsigned int index)
 956{
 957        struct tegra_xusb_usb3_port *usb3;
 958        struct device_node *np;
 959        int err = 0;
 960
 961        /*
 962         * If there is no supplemental configuration in the device tree the
 963         * port is unusable. But it is valid to configure only a single port,
 964         * hence return 0 instead of an error to allow ports to be optional.
 965         */
 966        np = tegra_xusb_find_port_node(padctl, "usb3", index);
 967        if (!np || !of_device_is_available(np))
 968                goto out;
 969
 970        usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
 971        if (!usb3) {
 972                err = -ENOMEM;
 973                goto out;
 974        }
 975
 976        err = tegra_xusb_port_init(&usb3->base, padctl, np, "usb3", index);
 977        if (err < 0)
 978                goto out;
 979
 980        usb3->base.ops = padctl->soc->ports.usb3.ops;
 981
 982        usb3->base.lane = usb3->base.ops->map(&usb3->base);
 983        if (IS_ERR(usb3->base.lane)) {
 984                err = PTR_ERR(usb3->base.lane);
 985                goto out;
 986        }
 987
 988        err = tegra_xusb_usb3_port_parse_dt(usb3);
 989        if (err < 0) {
 990                tegra_xusb_port_unregister(&usb3->base);
 991                goto out;
 992        }
 993
 994        list_add_tail(&usb3->base.list, &padctl->ports);
 995
 996out:
 997        of_node_put(np);
 998        return err;
 999}
1000
1001void tegra_xusb_usb3_port_release(struct tegra_xusb_port *port)
1002{
1003        struct tegra_xusb_usb3_port *usb3 = to_usb3_port(port);
1004
1005        kfree(usb3);
1006}
1007
1008void tegra_xusb_usb3_port_remove(struct tegra_xusb_port *port)
1009{
1010        struct tegra_xusb_usb3_port *usb3 = to_usb3_port(port);
1011
1012        regulator_put(usb3->supply);
1013}
1014
1015static void __tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl)
1016{
1017        struct tegra_xusb_port *port, *tmp;
1018
1019        list_for_each_entry_safe_reverse(port, tmp, &padctl->ports, list) {
1020                list_del(&port->list);
1021                tegra_xusb_port_unregister(port);
1022        }
1023}
1024
1025static int tegra_xusb_find_unused_usb3_port(struct tegra_xusb_padctl *padctl)
1026{
1027        struct device_node *np;
1028        unsigned int i;
1029
1030        for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1031                np = tegra_xusb_find_port_node(padctl, "usb3", i);
1032                if (!np || !of_device_is_available(np))
1033                        return i;
1034        }
1035
1036        return -ENODEV;
1037}
1038
1039static bool tegra_xusb_port_is_companion(struct tegra_xusb_usb2_port *usb2)
1040{
1041        unsigned int i;
1042        struct tegra_xusb_usb3_port *usb3;
1043        struct tegra_xusb_padctl *padctl = usb2->base.padctl;
1044
1045        for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1046                usb3 = tegra_xusb_find_usb3_port(padctl, i);
1047                if (usb3 && usb3->port == usb2->base.index)
1048                        return true;
1049        }
1050
1051        return false;
1052}
1053
1054static int tegra_xusb_update_usb3_fake_port(struct tegra_xusb_usb2_port *usb2)
1055{
1056        int fake;
1057
1058        /* Disable usb3_port_fake usage by default and assign if needed */
1059        usb2->usb3_port_fake = -1;
1060
1061        if ((usb2->mode == USB_DR_MODE_OTG ||
1062             usb2->mode == USB_DR_MODE_PERIPHERAL) &&
1063                !tegra_xusb_port_is_companion(usb2)) {
1064                fake = tegra_xusb_find_unused_usb3_port(usb2->base.padctl);
1065                if (fake < 0) {
1066                        dev_err(&usb2->base.dev, "no unused USB3 ports available\n");
1067                        return -ENODEV;
1068                }
1069
1070                dev_dbg(&usb2->base.dev, "Found unused usb3 port: %d\n", fake);
1071                usb2->usb3_port_fake = fake;
1072        }
1073
1074        return 0;
1075}
1076
1077static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl)
1078{
1079        struct tegra_xusb_port *port;
1080        struct tegra_xusb_usb2_port *usb2;
1081        unsigned int i;
1082        int err = 0;
1083
1084        mutex_lock(&padctl->lock);
1085
1086        for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
1087                err = tegra_xusb_add_usb2_port(padctl, i);
1088                if (err < 0)
1089                        goto remove_ports;
1090        }
1091
1092        for (i = 0; i < padctl->soc->ports.ulpi.count; i++) {
1093                err = tegra_xusb_add_ulpi_port(padctl, i);
1094                if (err < 0)
1095                        goto remove_ports;
1096        }
1097
1098        for (i = 0; i < padctl->soc->ports.hsic.count; i++) {
1099                err = tegra_xusb_add_hsic_port(padctl, i);
1100                if (err < 0)
1101                        goto remove_ports;
1102        }
1103
1104        for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1105                err = tegra_xusb_add_usb3_port(padctl, i);
1106                if (err < 0)
1107                        goto remove_ports;
1108        }
1109
1110        if (padctl->soc->need_fake_usb3_port) {
1111                for (i = 0; i < padctl->soc->ports.usb2.count; i++) {
1112                        usb2 = tegra_xusb_find_usb2_port(padctl, i);
1113                        if (!usb2)
1114                                continue;
1115
1116                        err = tegra_xusb_update_usb3_fake_port(usb2);
1117                        if (err < 0)
1118                                goto remove_ports;
1119                }
1120        }
1121
1122        list_for_each_entry(port, &padctl->ports, list) {
1123                err = port->ops->enable(port);
1124                if (err < 0)
1125                        dev_err(padctl->dev, "failed to enable port %s: %d\n",
1126                                dev_name(&port->dev), err);
1127        }
1128
1129        goto unlock;
1130
1131remove_ports:
1132        __tegra_xusb_remove_ports(padctl);
1133unlock:
1134        mutex_unlock(&padctl->lock);
1135        return err;
1136}
1137
1138static void tegra_xusb_remove_ports(struct tegra_xusb_padctl *padctl)
1139{
1140        mutex_lock(&padctl->lock);
1141        __tegra_xusb_remove_ports(padctl);
1142        mutex_unlock(&padctl->lock);
1143}
1144
1145static int tegra_xusb_padctl_probe(struct platform_device *pdev)
1146{
1147        struct device_node *np = pdev->dev.of_node;
1148        const struct tegra_xusb_padctl_soc *soc;
1149        struct tegra_xusb_padctl *padctl;
1150        const struct of_device_id *match;
1151        int err;
1152
1153        /* for backwards compatibility with old device trees */
1154        np = of_get_child_by_name(np, "pads");
1155        if (!np) {
1156                dev_warn(&pdev->dev, "deprecated DT, using legacy driver\n");
1157                return tegra_xusb_padctl_legacy_probe(pdev);
1158        }
1159
1160        of_node_put(np);
1161
1162        match = of_match_node(tegra_xusb_padctl_of_match, pdev->dev.of_node);
1163        soc = match->data;
1164
1165        padctl = soc->ops->probe(&pdev->dev, soc);
1166        if (IS_ERR(padctl))
1167                return PTR_ERR(padctl);
1168
1169        platform_set_drvdata(pdev, padctl);
1170        INIT_LIST_HEAD(&padctl->ports);
1171        INIT_LIST_HEAD(&padctl->lanes);
1172        INIT_LIST_HEAD(&padctl->pads);
1173        mutex_init(&padctl->lock);
1174
1175        padctl->regs = devm_platform_ioremap_resource(pdev, 0);
1176        if (IS_ERR(padctl->regs)) {
1177                err = PTR_ERR(padctl->regs);
1178                goto remove;
1179        }
1180
1181        padctl->rst = devm_reset_control_get(&pdev->dev, NULL);
1182        if (IS_ERR(padctl->rst)) {
1183                err = PTR_ERR(padctl->rst);
1184                goto remove;
1185        }
1186
1187        padctl->supplies = devm_kcalloc(&pdev->dev, padctl->soc->num_supplies,
1188                                        sizeof(*padctl->supplies), GFP_KERNEL);
1189        if (!padctl->supplies) {
1190                err = -ENOMEM;
1191                goto remove;
1192        }
1193
1194        regulator_bulk_set_supply_names(padctl->supplies,
1195                                        padctl->soc->supply_names,
1196                                        padctl->soc->num_supplies);
1197
1198        err = devm_regulator_bulk_get(&pdev->dev, padctl->soc->num_supplies,
1199                                      padctl->supplies);
1200        if (err < 0) {
1201                dev_err_probe(&pdev->dev, err, "failed to get regulators\n");
1202                goto remove;
1203        }
1204
1205        err = reset_control_deassert(padctl->rst);
1206        if (err < 0)
1207                goto remove;
1208
1209        err = regulator_bulk_enable(padctl->soc->num_supplies,
1210                                    padctl->supplies);
1211        if (err < 0) {
1212                dev_err(&pdev->dev, "failed to enable supplies: %d\n", err);
1213                goto reset;
1214        }
1215
1216        err = tegra_xusb_setup_pads(padctl);
1217        if (err < 0) {
1218                dev_err(&pdev->dev, "failed to setup pads: %d\n", err);
1219                goto power_down;
1220        }
1221
1222        err = tegra_xusb_setup_ports(padctl);
1223        if (err) {
1224                const char *level = KERN_ERR;
1225
1226                if (err == -EPROBE_DEFER)
1227                        level = KERN_DEBUG;
1228
1229                dev_printk(level, &pdev->dev,
1230                           dev_fmt("failed to setup XUSB ports: %d\n"), err);
1231                goto remove_pads;
1232        }
1233
1234        return 0;
1235
1236remove_pads:
1237        tegra_xusb_remove_pads(padctl);
1238power_down:
1239        regulator_bulk_disable(padctl->soc->num_supplies, padctl->supplies);
1240reset:
1241        reset_control_assert(padctl->rst);
1242remove:
1243        platform_set_drvdata(pdev, NULL);
1244        soc->ops->remove(padctl);
1245        return err;
1246}
1247
1248static int tegra_xusb_padctl_remove(struct platform_device *pdev)
1249{
1250        struct tegra_xusb_padctl *padctl = platform_get_drvdata(pdev);
1251        int err;
1252
1253        tegra_xusb_remove_ports(padctl);
1254        tegra_xusb_remove_pads(padctl);
1255
1256        err = regulator_bulk_disable(padctl->soc->num_supplies,
1257                                     padctl->supplies);
1258        if (err < 0)
1259                dev_err(&pdev->dev, "failed to disable supplies: %d\n", err);
1260
1261        err = reset_control_assert(padctl->rst);
1262        if (err < 0)
1263                dev_err(&pdev->dev, "failed to assert reset: %d\n", err);
1264
1265        padctl->soc->ops->remove(padctl);
1266
1267        return err;
1268}
1269
1270static struct platform_driver tegra_xusb_padctl_driver = {
1271        .driver = {
1272                .name = "tegra-xusb-padctl",
1273                .of_match_table = tegra_xusb_padctl_of_match,
1274        },
1275        .probe = tegra_xusb_padctl_probe,
1276        .remove = tegra_xusb_padctl_remove,
1277};
1278module_platform_driver(tegra_xusb_padctl_driver);
1279
1280struct tegra_xusb_padctl *tegra_xusb_padctl_get(struct device *dev)
1281{
1282        struct tegra_xusb_padctl *padctl;
1283        struct platform_device *pdev;
1284        struct device_node *np;
1285
1286        np = of_parse_phandle(dev->of_node, "nvidia,xusb-padctl", 0);
1287        if (!np)
1288                return ERR_PTR(-EINVAL);
1289
1290        /*
1291         * This is slightly ugly. A better implementation would be to keep a
1292         * registry of pad controllers, but since there will almost certainly
1293         * only ever be one per SoC that would be a little overkill.
1294         */
1295        pdev = of_find_device_by_node(np);
1296        if (!pdev) {
1297                of_node_put(np);
1298                return ERR_PTR(-ENODEV);
1299        }
1300
1301        of_node_put(np);
1302
1303        padctl = platform_get_drvdata(pdev);
1304        if (!padctl) {
1305                put_device(&pdev->dev);
1306                return ERR_PTR(-EPROBE_DEFER);
1307        }
1308
1309        return padctl;
1310}
1311EXPORT_SYMBOL_GPL(tegra_xusb_padctl_get);
1312
1313void tegra_xusb_padctl_put(struct tegra_xusb_padctl *padctl)
1314{
1315        if (padctl)
1316                put_device(padctl->dev);
1317}
1318EXPORT_SYMBOL_GPL(tegra_xusb_padctl_put);
1319
1320int tegra_xusb_padctl_usb3_save_context(struct tegra_xusb_padctl *padctl,
1321                                        unsigned int port)
1322{
1323        if (padctl->soc->ops->usb3_save_context)
1324                return padctl->soc->ops->usb3_save_context(padctl, port);
1325
1326        return -ENOSYS;
1327}
1328EXPORT_SYMBOL_GPL(tegra_xusb_padctl_usb3_save_context);
1329
1330int tegra_xusb_padctl_hsic_set_idle(struct tegra_xusb_padctl *padctl,
1331                                    unsigned int port, bool idle)
1332{
1333        if (padctl->soc->ops->hsic_set_idle)
1334                return padctl->soc->ops->hsic_set_idle(padctl, port, idle);
1335
1336        return -ENOSYS;
1337}
1338EXPORT_SYMBOL_GPL(tegra_xusb_padctl_hsic_set_idle);
1339
1340int tegra_xusb_padctl_usb3_set_lfps_detect(struct tegra_xusb_padctl *padctl,
1341                                           unsigned int port, bool enable)
1342{
1343        if (padctl->soc->ops->usb3_set_lfps_detect)
1344                return padctl->soc->ops->usb3_set_lfps_detect(padctl, port,
1345                                                              enable);
1346
1347        return -ENOSYS;
1348}
1349EXPORT_SYMBOL_GPL(tegra_xusb_padctl_usb3_set_lfps_detect);
1350
1351int tegra_xusb_padctl_set_vbus_override(struct tegra_xusb_padctl *padctl,
1352                                                        bool val)
1353{
1354        if (padctl->soc->ops->vbus_override)
1355                return padctl->soc->ops->vbus_override(padctl, val);
1356
1357        return -ENOTSUPP;
1358}
1359EXPORT_SYMBOL_GPL(tegra_xusb_padctl_set_vbus_override);
1360
1361int tegra_phy_xusb_utmi_port_reset(struct phy *phy)
1362{
1363        struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1364        struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1365
1366        if (padctl->soc->ops->utmi_port_reset)
1367                return padctl->soc->ops->utmi_port_reset(phy);
1368
1369        return -ENOTSUPP;
1370}
1371EXPORT_SYMBOL_GPL(tegra_phy_xusb_utmi_port_reset);
1372
1373int tegra_xusb_padctl_get_usb3_companion(struct tegra_xusb_padctl *padctl,
1374                                    unsigned int port)
1375{
1376        struct tegra_xusb_usb2_port *usb2;
1377        struct tegra_xusb_usb3_port *usb3;
1378        int i;
1379
1380        usb2 = tegra_xusb_find_usb2_port(padctl, port);
1381        if (!usb2)
1382                return -EINVAL;
1383
1384        for (i = 0; i < padctl->soc->ports.usb3.count; i++) {
1385                usb3 = tegra_xusb_find_usb3_port(padctl, i);
1386                if (usb3 && usb3->port == usb2->base.index)
1387                        return usb3->base.index;
1388        }
1389
1390        return -ENODEV;
1391}
1392EXPORT_SYMBOL_GPL(tegra_xusb_padctl_get_usb3_companion);
1393
1394MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
1395MODULE_DESCRIPTION("Tegra XUSB Pad Controller driver");
1396MODULE_LICENSE("GPL v2");
1397