Merge tag 'close-range-openat2-v5.11' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / drivers / phy / tegra / xusb.c
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
24 static 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
50 static 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 };
77 MODULE_DEVICE_TABLE(of, tegra_xusb_padctl_of_match);
78
79 static struct device_node *
80 tegra_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
94 static struct device_node *
95 tegra_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
109 int 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
132 static 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
142 static 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
149 static const struct device_type tegra_xusb_pad_type = {
150         .release = tegra_xusb_pad_release,
151 };
152
153 int 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
176 unregister:
177         device_unregister(&pad->dev);
178         return err;
179 }
180
181 int 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
237 remove:
238         while (i--)
239                 tegra_xusb_lane_destroy(pad->lanes[i]);
240
241         of_node_put(children);
242
243         return err;
244 }
245
246 void 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
258 static struct tegra_xusb_pad *
259 tegra_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
297 static 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
307 static 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
314 static 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
331 static 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
345 static 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
379 static 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
387 struct 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
409 struct tegra_xusb_lane *
410 tegra_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
438 static struct device_node *
439 tegra_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
461 struct tegra_xusb_port *
462 tegra_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
484 struct tegra_xusb_usb2_port *
485 tegra_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
496 struct tegra_xusb_usb3_port *
497 tegra_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
508 static 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
516 static const struct device_type tegra_xusb_port_type = {
517         .release = tegra_xusb_port_release,
518 };
519
520 static 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
547 unregister:
548         device_unregister(&port->dev);
549         return err;
550 }
551
552 static 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
567 static 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
574 static const char * const usb_roles[] = {
575         [USB_ROLE_NONE]         = "none",
576         [USB_ROLE_HOST]         = "host",
577         [USB_ROLE_DEVICE]       = "device",
578 };
579
580 static 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
594 static 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
609 static 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
621 static 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
634 static 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
647 static 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
708 static 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
748 static 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
789 out:
790         of_node_put(np);
791         return err;
792 }
793
794 void 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
801 void 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
808 static 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
818 static 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
855 out:
856         of_node_put(np);
857         return err;
858 }
859
860 void 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
867 static int tegra_xusb_hsic_port_parse_dt(struct tegra_xusb_hsic_port *hsic)
868 {
869         /* XXX */
870         return 0;
871 }
872
873 static 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
910 out:
911         of_node_put(np);
912         return err;
913 }
914
915 void 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
922 static 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
954 static 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
996 out:
997         of_node_put(np);
998         return err;
999 }
1000
1001 void 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
1008 void 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
1015 static 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
1025 static 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
1039 static 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
1054 static 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
1077 static 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
1131 remove_ports:
1132         __tegra_xusb_remove_ports(padctl);
1133 unlock:
1134         mutex_unlock(&padctl->lock);
1135         return err;
1136 }
1137
1138 static 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
1145 static 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
1236 remove_pads:
1237         tegra_xusb_remove_pads(padctl);
1238 power_down:
1239         regulator_bulk_disable(padctl->soc->num_supplies, padctl->supplies);
1240 reset:
1241         reset_control_assert(padctl->rst);
1242 remove:
1243         platform_set_drvdata(pdev, NULL);
1244         soc->ops->remove(padctl);
1245         return err;
1246 }
1247
1248 static 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
1270 static 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 };
1278 module_platform_driver(tegra_xusb_padctl_driver);
1279
1280 struct 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 }
1311 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_get);
1312
1313 void tegra_xusb_padctl_put(struct tegra_xusb_padctl *padctl)
1314 {
1315         if (padctl)
1316                 put_device(padctl->dev);
1317 }
1318 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_put);
1319
1320 int 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 }
1328 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_usb3_save_context);
1329
1330 int 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 }
1338 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_hsic_set_idle);
1339
1340 int 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 }
1349 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_usb3_set_lfps_detect);
1350
1351 int 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 }
1359 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_set_vbus_override);
1360
1361 int 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 }
1371 EXPORT_SYMBOL_GPL(tegra_phy_xusb_utmi_port_reset);
1372
1373 int 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 }
1392 EXPORT_SYMBOL_GPL(tegra_xusb_padctl_get_usb3_companion);
1393
1394 MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
1395 MODULE_DESCRIPTION("Tegra XUSB Pad Controller driver");
1396 MODULE_LICENSE("GPL v2");