1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2016-2019, NVIDIA CORPORATION.  All rights reserved.
4 */
5
6#include <linux/delay.h>
7#include <linux/io.h>
8#include <linux/module.h>
9#include <linux/of.h>
10#include <linux/phy/phy.h>
11#include <linux/regulator/consumer.h>
12#include <linux/platform_device.h>
13#include <linux/clk.h>
14#include <linux/slab.h>
15
16#include <soc/tegra/fuse.h>
17
18#include "xusb.h"
19
20/* FUSE USB_CALIB registers */
21#define HS_CURR_LEVEL_PADX_SHIFT(x)	((x) ? (11 + (x - 1) * 6) : 0)
22#define HS_CURR_LEVEL_PAD_MASK		0x3f
23#define HS_TERM_RANGE_ADJ_SHIFT		7
24#define HS_TERM_RANGE_ADJ_MASK		0xf
25#define HS_SQUELCH_SHIFT		29
26#define HS_SQUELCH_MASK			0x7
27
28#define RPD_CTRL_SHIFT			0
29#define RPD_CTRL_MASK			0x1f
30
31/* XUSB PADCTL registers */
32#define XUSB_PADCTL_USB2_PAD_MUX	0x4
33#define  USB2_PORT_SHIFT(x)		((x) * 2)
34#define  USB2_PORT_MASK			0x3
35#define   PORT_XUSB			1
36#define  HSIC_PORT_SHIFT(x)		((x) + 20)
37#define  HSIC_PORT_MASK			0x1
38#define   PORT_HSIC			0
39
40#define XUSB_PADCTL_USB2_PORT_CAP	0x8
41#define XUSB_PADCTL_SS_PORT_CAP		0xc
42#define  PORTX_CAP_SHIFT(x)		((x) * 4)
43#define  PORT_CAP_MASK			0x3
44#define   PORT_CAP_DISABLED		0x0
45#define   PORT_CAP_HOST			0x1
46#define   PORT_CAP_DEVICE		0x2
47#define   PORT_CAP_OTG			0x3
48
49#define XUSB_PADCTL_ELPG_PROGRAM		0x20
50#define  USB2_PORT_WAKE_INTERRUPT_ENABLE(x)		BIT(x)
51#define  USB2_PORT_WAKEUP_EVENT(x)			BIT((x) +  7)
52#define  SS_PORT_WAKE_INTERRUPT_ENABLE(x)		BIT((x) + 14)
53#define  SS_PORT_WAKEUP_EVENT(x)			BIT((x) + 21)
54#define  USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(x)	BIT((x) + 28)
55#define  USB2_HSIC_PORT_WAKEUP_EVENT(x)			BIT((x) + 30)
56#define  ALL_WAKE_EVENTS						\
57	(USB2_PORT_WAKEUP_EVENT(0) | USB2_PORT_WAKEUP_EVENT(1) |	\
58	USB2_PORT_WAKEUP_EVENT(2) | SS_PORT_WAKEUP_EVENT(0) |		\
59	SS_PORT_WAKEUP_EVENT(1) | SS_PORT_WAKEUP_EVENT(2) |		\
60	USB2_HSIC_PORT_WAKEUP_EVENT(0))
61
62#define XUSB_PADCTL_ELPG_PROGRAM_1		0x24
63#define  SSPX_ELPG_CLAMP_EN(x)			BIT(0 + (x) * 3)
64#define  SSPX_ELPG_CLAMP_EN_EARLY(x)		BIT(1 + (x) * 3)
65#define  SSPX_ELPG_VCORE_DOWN(x)		BIT(2 + (x) * 3)
66#define XUSB_PADCTL_SS_PORT_CFG			0x2c
67#define   PORTX_SPEED_SUPPORT_SHIFT(x)		((x) * 4)
68#define   PORTX_SPEED_SUPPORT_MASK		(0x3)
69#define     PORT_SPEED_SUPPORT_GEN1		(0x0)
70
71#define XUSB_PADCTL_USB2_OTG_PADX_CTL0(x)	(0x88 + (x) * 0x40)
72#define  HS_CURR_LEVEL(x)			((x) & 0x3f)
73#define  TERM_SEL				BIT(25)
74#define  USB2_OTG_PD				BIT(26)
75#define  USB2_OTG_PD2				BIT(27)
76#define  USB2_OTG_PD2_OVRD_EN			BIT(28)
77#define  USB2_OTG_PD_ZI				BIT(29)
78
79#define XUSB_PADCTL_USB2_OTG_PADX_CTL1(x)	(0x8c + (x) * 0x40)
80#define  USB2_OTG_PD_DR				BIT(2)
81#define  TERM_RANGE_ADJ(x)			(((x) & 0xf) << 3)
82#define  RPD_CTRL(x)				(((x) & 0x1f) << 26)
83
84#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0		0x284
85#define  BIAS_PAD_PD				BIT(11)
86#define  HS_SQUELCH_LEVEL(x)			(((x) & 0x7) << 0)
87
88#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1		0x288
89#define  USB2_TRK_START_TIMER(x)		(((x) & 0x7f) << 12)
90#define  USB2_TRK_DONE_RESET_TIMER(x)		(((x) & 0x7f) << 19)
91#define  USB2_PD_TRK				BIT(26)
92
93#define XUSB_PADCTL_HSIC_PADX_CTL0(x)		(0x300 + (x) * 0x20)
94#define  HSIC_PD_TX_DATA0			BIT(1)
95#define  HSIC_PD_TX_STROBE			BIT(3)
96#define  HSIC_PD_RX_DATA0			BIT(4)
97#define  HSIC_PD_RX_STROBE			BIT(6)
98#define  HSIC_PD_ZI_DATA0			BIT(7)
99#define  HSIC_PD_ZI_STROBE			BIT(9)
100#define  HSIC_RPD_DATA0				BIT(13)
101#define  HSIC_RPD_STROBE			BIT(15)
102#define  HSIC_RPU_DATA0				BIT(16)
103#define  HSIC_RPU_STROBE			BIT(18)
104
105#define XUSB_PADCTL_HSIC_PAD_TRK_CTL0		0x340
106#define  HSIC_TRK_START_TIMER(x)		(((x) & 0x7f) << 5)
107#define  HSIC_TRK_DONE_RESET_TIMER(x)		(((x) & 0x7f) << 12)
108#define  HSIC_PD_TRK				BIT(19)
109
110#define USB2_VBUS_ID				0x360
111#define  VBUS_OVERRIDE				BIT(14)
112#define  ID_OVERRIDE(x)				(((x) & 0xf) << 18)
113#define  ID_OVERRIDE_FLOATING			ID_OVERRIDE(8)
114#define  ID_OVERRIDE_GROUNDED			ID_OVERRIDE(0)
115
116#define TEGRA186_LANE(_name, _offset, _shift, _mask, _type)		\
117	{								\
118		.name = _name,						\
119		.offset = _offset,					\
120		.shift = _shift,					\
121		.mask = _mask,						\
122		.num_funcs = ARRAY_SIZE(tegra186_##_type##_functions),	\
123		.funcs = tegra186_##_type##_functions,			\
124	}
125
126struct tegra_xusb_fuse_calibration {
127	u32 *hs_curr_level;
128	u32 hs_squelch;
129	u32 hs_term_range_adj;
130	u32 rpd_ctrl;
131};
132
133struct tegra186_xusb_padctl {
134	struct tegra_xusb_padctl base;
135
136	struct tegra_xusb_fuse_calibration calib;
137
138	/* UTMI bias and tracking */
139	struct clk *usb2_trk_clk;
140	unsigned int bias_pad_enable;
141};
142
143static inline struct tegra186_xusb_padctl *
144to_tegra186_xusb_padctl(struct tegra_xusb_padctl *padctl)
145{
146	return container_of(padctl, struct tegra186_xusb_padctl, base);
147}
148
149/* USB 2.0 UTMI PHY support */
150static struct tegra_xusb_lane *
151tegra186_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
152			 unsigned int index)
153{
154	struct tegra_xusb_usb2_lane *usb2;
155	int err;
156
157	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
158	if (!usb2)
159		return ERR_PTR(-ENOMEM);
160
161	INIT_LIST_HEAD(&usb2->base.list);
162	usb2->base.soc = &pad->soc->lanes[index];
163	usb2->base.index = index;
164	usb2->base.pad = pad;
165	usb2->base.np = np;
166
167	err = tegra_xusb_lane_parse_dt(&usb2->base, np);
168	if (err < 0) {
169		kfree(usb2);
170		return ERR_PTR(err);
171	}
172
173	return &usb2->base;
174}
175
176static void tegra186_usb2_lane_remove(struct tegra_xusb_lane *lane)
177{
178	struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
179
180	kfree(usb2);
181}
182
183static const struct tegra_xusb_lane_ops tegra186_usb2_lane_ops = {
184	.probe = tegra186_usb2_lane_probe,
185	.remove = tegra186_usb2_lane_remove,
186};
187
188static void tegra186_utmi_bias_pad_power_on(struct tegra_xusb_padctl *padctl)
189{
190	struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
191	struct device *dev = padctl->dev;
192	u32 value;
193	int err;
194
195	mutex_lock(&padctl->lock);
196
197	if (priv->bias_pad_enable++ > 0) {
198		mutex_unlock(&padctl->lock);
199		return;
200	}
201
202	err = clk_prepare_enable(priv->usb2_trk_clk);
203	if (err < 0)
204		dev_warn(dev, "failed to enable USB2 trk clock: %d\n", err);
205
206	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
207	value &= ~USB2_TRK_START_TIMER(~0);
208	value |= USB2_TRK_START_TIMER(0x1e);
209	value &= ~USB2_TRK_DONE_RESET_TIMER(~0);
210	value |= USB2_TRK_DONE_RESET_TIMER(0xa);
211	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
212
213	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
214	value &= ~BIAS_PAD_PD;
215	value &= ~HS_SQUELCH_LEVEL(~0);
216	value |= HS_SQUELCH_LEVEL(priv->calib.hs_squelch);
217	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
218
219	udelay(1);
220
221	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
222	value &= ~USB2_PD_TRK;
223	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
224
225	mutex_unlock(&padctl->lock);
226}
227
228static void tegra186_utmi_bias_pad_power_off(struct tegra_xusb_padctl *padctl)
229{
230	struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
231	u32 value;
232
233	mutex_lock(&padctl->lock);
234
235	if (WARN_ON(priv->bias_pad_enable == 0)) {
236		mutex_unlock(&padctl->lock);
237		return;
238	}
239
240	if (--priv->bias_pad_enable > 0) {
241		mutex_unlock(&padctl->lock);
242		return;
243	}
244
245	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
246	value |= USB2_PD_TRK;
247	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
248
249	clk_disable_unprepare(priv->usb2_trk_clk);
250
251	mutex_unlock(&padctl->lock);
252}
253
254static void tegra_phy_xusb_utmi_pad_power_on(struct phy *phy)
255{
256	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
257	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
258	struct tegra_xusb_usb2_port *port;
259	struct device *dev = padctl->dev;
260	unsigned int index = lane->index;
261	u32 value;
262
263	if (!phy)
264		return;
265
266	port = tegra_xusb_find_usb2_port(padctl, index);
267	if (!port) {
268		dev_err(dev, "no port found for USB2 lane %u\n", index);
269		return;
270	}
271
272	tegra186_utmi_bias_pad_power_on(padctl);
273
274	udelay(2);
275
276	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
277	value &= ~USB2_OTG_PD;
278	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
279
280	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
281	value &= ~USB2_OTG_PD_DR;
282	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
283}
284
285static void tegra_phy_xusb_utmi_pad_power_down(struct phy *phy)
286{
287	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
288	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
289	unsigned int index = lane->index;
290	u32 value;
291
292	if (!phy)
293		return;
294
295	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
296	value |= USB2_OTG_PD;
297	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
298
299	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
300	value |= USB2_OTG_PD_DR;
301	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
302
303	udelay(2);
304
305	tegra186_utmi_bias_pad_power_off(padctl);
306}
307
308static int tegra186_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl,
309					       bool status)
310{
311	u32 value;
312
313	dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear");
314
315	value = padctl_readl(padctl, USB2_VBUS_ID);
316
317	if (status) {
318		value |= VBUS_OVERRIDE;
319		value &= ~ID_OVERRIDE(~0);
320		value |= ID_OVERRIDE_FLOATING;
321	} else {
322		value &= ~VBUS_OVERRIDE;
323	}
324
325	padctl_writel(padctl, value, USB2_VBUS_ID);
326
327	return 0;
328}
329
330static int tegra186_xusb_padctl_id_override(struct tegra_xusb_padctl *padctl,
331					    bool status)
332{
333	u32 value;
334
335	dev_dbg(padctl->dev, "%s id override\n", status ? "set" : "clear");
336
337	value = padctl_readl(padctl, USB2_VBUS_ID);
338
339	if (status) {
340		if (value & VBUS_OVERRIDE) {
341			value &= ~VBUS_OVERRIDE;
342			padctl_writel(padctl, value, USB2_VBUS_ID);
343			usleep_range(1000, 2000);
344
345			value = padctl_readl(padctl, USB2_VBUS_ID);
346		}
347
348		value &= ~ID_OVERRIDE(~0);
349		value |= ID_OVERRIDE_GROUNDED;
350	} else {
351		value &= ~ID_OVERRIDE(~0);
352		value |= ID_OVERRIDE_FLOATING;
353	}
354
355	padctl_writel(padctl, value, USB2_VBUS_ID);
356
357	return 0;
358}
359
360static int tegra186_utmi_phy_set_mode(struct phy *phy, enum phy_mode mode,
361				      int submode)
362{
363	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
364	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
365	struct tegra_xusb_usb2_port *port = tegra_xusb_find_usb2_port(padctl,
366								lane->index);
367	int err = 0;
368
369	mutex_lock(&padctl->lock);
370
371	dev_dbg(&port->base.dev, "%s: mode %d", __func__, mode);
372
373	if (mode == PHY_MODE_USB_OTG) {
374		if (submode == USB_ROLE_HOST) {
375			tegra186_xusb_padctl_id_override(padctl, true);
376
377			err = regulator_enable(port->supply);
378		} else if (submode == USB_ROLE_DEVICE) {
379			tegra186_xusb_padctl_vbus_override(padctl, true);
380		} else if (submode == USB_ROLE_NONE) {
381			/*
382			 * When port is peripheral only or role transitions to
383			 * USB_ROLE_NONE from USB_ROLE_DEVICE, regulator is not
384			 * enabled.
385			 */
386			if (regulator_is_enabled(port->supply))
387				regulator_disable(port->supply);
388
389			tegra186_xusb_padctl_id_override(padctl, false);
390			tegra186_xusb_padctl_vbus_override(padctl, false);
391		}
392	}
393
394	mutex_unlock(&padctl->lock);
395
396	return err;
397}
398
399static int tegra186_utmi_phy_power_on(struct phy *phy)
400{
401	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
402	struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
403	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
404	struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
405	struct tegra_xusb_usb2_port *port;
406	unsigned int index = lane->index;
407	struct device *dev = padctl->dev;
408	u32 value;
409
410	port = tegra_xusb_find_usb2_port(padctl, index);
411	if (!port) {
412		dev_err(dev, "no port found for USB2 lane %u\n", index);
413		return -ENODEV;
414	}
415
416	value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
417	value &= ~(USB2_PORT_MASK << USB2_PORT_SHIFT(index));
418	value |= (PORT_XUSB << USB2_PORT_SHIFT(index));
419	padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
420
421	value = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
422	value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index));
423
424	if (port->mode == USB_DR_MODE_UNKNOWN)
425		value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index));
426	else if (port->mode == USB_DR_MODE_PERIPHERAL)
427		value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index));
428	else if (port->mode == USB_DR_MODE_HOST)
429		value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index));
430	else if (port->mode == USB_DR_MODE_OTG)
431		value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index));
432
433	padctl_writel(padctl, value, XUSB_PADCTL_USB2_PORT_CAP);
434
435	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
436	value &= ~USB2_OTG_PD_ZI;
437	value |= TERM_SEL;
438	value &= ~HS_CURR_LEVEL(~0);
439
440	if (usb2->hs_curr_level_offset) {
441		int hs_current_level;
442
443		hs_current_level = (int)priv->calib.hs_curr_level[index] +
444						usb2->hs_curr_level_offset;
445
446		if (hs_current_level < 0)
447			hs_current_level = 0;
448		if (hs_current_level > 0x3f)
449			hs_current_level = 0x3f;
450
451		value |= HS_CURR_LEVEL(hs_current_level);
452	} else {
453		value |= HS_CURR_LEVEL(priv->calib.hs_curr_level[index]);
454	}
455
456	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
457
458	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
459	value &= ~TERM_RANGE_ADJ(~0);
460	value |= TERM_RANGE_ADJ(priv->calib.hs_term_range_adj);
461	value &= ~RPD_CTRL(~0);
462	value |= RPD_CTRL(priv->calib.rpd_ctrl);
463	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
464
465	/* TODO: pad power saving */
466	tegra_phy_xusb_utmi_pad_power_on(phy);
467	return 0;
468}
469
470static int tegra186_utmi_phy_power_off(struct phy *phy)
471{
472	/* TODO: pad power saving */
473	tegra_phy_xusb_utmi_pad_power_down(phy);
474
475	return 0;
476}
477
478static int tegra186_utmi_phy_init(struct phy *phy)
479{
480	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
481	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
482	struct tegra_xusb_usb2_port *port;
483	unsigned int index = lane->index;
484	struct device *dev = padctl->dev;
485	int err;
486
487	port = tegra_xusb_find_usb2_port(padctl, index);
488	if (!port) {
489		dev_err(dev, "no port found for USB2 lane %u\n", index);
490		return -ENODEV;
491	}
492
493	if (port->supply && port->mode == USB_DR_MODE_HOST) {
494		err = regulator_enable(port->supply);
495		if (err) {
496			dev_err(dev, "failed to enable port %u VBUS: %d\n",
497				index, err);
498			return err;
499		}
500	}
501
502	return 0;
503}
504
505static int tegra186_utmi_phy_exit(struct phy *phy)
506{
507	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
508	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
509	struct tegra_xusb_usb2_port *port;
510	unsigned int index = lane->index;
511	struct device *dev = padctl->dev;
512	int err;
513
514	port = tegra_xusb_find_usb2_port(padctl, index);
515	if (!port) {
516		dev_err(dev, "no port found for USB2 lane %u\n", index);
517		return -ENODEV;
518	}
519
520	if (port->supply && port->mode == USB_DR_MODE_HOST) {
521		err = regulator_disable(port->supply);
522		if (err) {
523			dev_err(dev, "failed to disable port %u VBUS: %d\n",
524				index, err);
525			return err;
526		}
527	}
528
529	return 0;
530}
531
532static const struct phy_ops utmi_phy_ops = {
533	.init = tegra186_utmi_phy_init,
534	.exit = tegra186_utmi_phy_exit,
535	.power_on = tegra186_utmi_phy_power_on,
536	.power_off = tegra186_utmi_phy_power_off,
537	.set_mode = tegra186_utmi_phy_set_mode,
538	.owner = THIS_MODULE,
539};
540
541static struct tegra_xusb_pad *
542tegra186_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
543			const struct tegra_xusb_pad_soc *soc,
544			struct device_node *np)
545{
546	struct tegra186_xusb_padctl *priv = to_tegra186_xusb_padctl(padctl);
547	struct tegra_xusb_usb2_pad *usb2;
548	struct tegra_xusb_pad *pad;
549	int err;
550
551	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
552	if (!usb2)
553		return ERR_PTR(-ENOMEM);
554
555	pad = &usb2->base;
556	pad->ops = &tegra186_usb2_lane_ops;
557	pad->soc = soc;
558
559	err = tegra_xusb_pad_init(pad, padctl, np);
560	if (err < 0) {
561		kfree(usb2);
562		goto out;
563	}
564
565	priv->usb2_trk_clk = devm_clk_get(&pad->dev, "trk");
566	if (IS_ERR(priv->usb2_trk_clk)) {
567		err = PTR_ERR(priv->usb2_trk_clk);
568		dev_dbg(&pad->dev, "failed to get usb2 trk clock: %d\n", err);
569		goto unregister;
570	}
571
572	err = tegra_xusb_pad_register(pad, &utmi_phy_ops);
573	if (err < 0)
574		goto unregister;
575
576	dev_set_drvdata(&pad->dev, pad);
577
578	return pad;
579
580unregister:
581	device_unregister(&pad->dev);
582out:
583	return ERR_PTR(err);
584}
585
586static void tegra186_usb2_pad_remove(struct tegra_xusb_pad *pad)
587{
588	struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
589
590	kfree(usb2);
591}
592
593static const struct tegra_xusb_pad_ops tegra186_usb2_pad_ops = {
594	.probe = tegra186_usb2_pad_probe,
595	.remove = tegra186_usb2_pad_remove,
596};
597
598static const char * const tegra186_usb2_functions[] = {
599	"xusb",
600};
601
602static int tegra186_usb2_port_enable(struct tegra_xusb_port *port)
603{
604	return 0;
605}
606
607static void tegra186_usb2_port_disable(struct tegra_xusb_port *port)
608{
609}
610
611static struct tegra_xusb_lane *
612tegra186_usb2_port_map(struct tegra_xusb_port *port)
613{
614	return tegra_xusb_find_lane(port->padctl, "usb2", port->index);
615}
616
617static const struct tegra_xusb_port_ops tegra186_usb2_port_ops = {
618	.release = tegra_xusb_usb2_port_release,
619	.remove = tegra_xusb_usb2_port_remove,
620	.enable = tegra186_usb2_port_enable,
621	.disable = tegra186_usb2_port_disable,
622	.map = tegra186_usb2_port_map,
623};
624
625/* SuperSpeed PHY support */
626static struct tegra_xusb_lane *
627tegra186_usb3_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
628			 unsigned int index)
629{
630	struct tegra_xusb_usb3_lane *usb3;
631	int err;
632
633	usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
634	if (!usb3)
635		return ERR_PTR(-ENOMEM);
636
637	INIT_LIST_HEAD(&usb3->base.list);
638	usb3->base.soc = &pad->soc->lanes[index];
639	usb3->base.index = index;
640	usb3->base.pad = pad;
641	usb3->base.np = np;
642
643	err = tegra_xusb_lane_parse_dt(&usb3->base, np);
644	if (err < 0) {
645		kfree(usb3);
646		return ERR_PTR(err);
647	}
648
649	return &usb3->base;
650}
651
652static void tegra186_usb3_lane_remove(struct tegra_xusb_lane *lane)
653{
654	struct tegra_xusb_usb3_lane *usb3 = to_usb3_lane(lane);
655
656	kfree(usb3);
657}
658
659static const struct tegra_xusb_lane_ops tegra186_usb3_lane_ops = {
660	.probe = tegra186_usb3_lane_probe,
661	.remove = tegra186_usb3_lane_remove,
662};
663static int tegra186_usb3_port_enable(struct tegra_xusb_port *port)
664{
665	return 0;
666}
667
668static void tegra186_usb3_port_disable(struct tegra_xusb_port *port)
669{
670}
671
672static struct tegra_xusb_lane *
673tegra186_usb3_port_map(struct tegra_xusb_port *port)
674{
675	return tegra_xusb_find_lane(port->padctl, "usb3", port->index);
676}
677
678static const struct tegra_xusb_port_ops tegra186_usb3_port_ops = {
679	.release = tegra_xusb_usb3_port_release,
680	.remove = tegra_xusb_usb3_port_remove,
681	.enable = tegra186_usb3_port_enable,
682	.disable = tegra186_usb3_port_disable,
683	.map = tegra186_usb3_port_map,
684};
685
686static int tegra186_usb3_phy_power_on(struct phy *phy)
687{
688	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
689	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
690	struct tegra_xusb_usb3_port *port;
691	struct tegra_xusb_usb2_port *usb2;
692	unsigned int index = lane->index;
693	struct device *dev = padctl->dev;
694	u32 value;
695
696	port = tegra_xusb_find_usb3_port(padctl, index);
697	if (!port) {
698		dev_err(dev, "no port found for USB3 lane %u\n", index);
699		return -ENODEV;
700	}
701
702	usb2 = tegra_xusb_find_usb2_port(padctl, port->port);
703	if (!usb2) {
704		dev_err(dev, "no companion port found for USB3 lane %u\n",
705			index);
706		return -ENODEV;
707	}
708
709	mutex_lock(&padctl->lock);
710
711	value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CAP);
712	value &= ~(PORT_CAP_MASK << PORTX_CAP_SHIFT(index));
713
714	if (usb2->mode == USB_DR_MODE_UNKNOWN)
715		value |= (PORT_CAP_DISABLED << PORTX_CAP_SHIFT(index));
716	else if (usb2->mode == USB_DR_MODE_PERIPHERAL)
717		value |= (PORT_CAP_DEVICE << PORTX_CAP_SHIFT(index));
718	else if (usb2->mode == USB_DR_MODE_HOST)
719		value |= (PORT_CAP_HOST << PORTX_CAP_SHIFT(index));
720	else if (usb2->mode == USB_DR_MODE_OTG)
721		value |= (PORT_CAP_OTG << PORTX_CAP_SHIFT(index));
722
723	padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CAP);
724
725	if (padctl->soc->supports_gen2 && port->disable_gen2) {
726		value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_CFG);
727		value &= ~(PORTX_SPEED_SUPPORT_MASK <<
728			PORTX_SPEED_SUPPORT_SHIFT(index));
729		value |= (PORT_SPEED_SUPPORT_GEN1 <<
730			PORTX_SPEED_SUPPORT_SHIFT(index));
731		padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_CFG);
732	}
733
734	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
735	value &= ~SSPX_ELPG_VCORE_DOWN(index);
736	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
737
738	usleep_range(100, 200);
739
740	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
741	value &= ~SSPX_ELPG_CLAMP_EN_EARLY(index);
742	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
743
744	usleep_range(100, 200);
745
746	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
747	value &= ~SSPX_ELPG_CLAMP_EN(index);
748	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
749
750	mutex_unlock(&padctl->lock);
751
752	return 0;
753}
754
755static int tegra186_usb3_phy_power_off(struct phy *phy)
756{
757	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
758	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
759	struct tegra_xusb_usb3_port *port;
760	unsigned int index = lane->index;
761	struct device *dev = padctl->dev;
762	u32 value;
763
764	port = tegra_xusb_find_usb3_port(padctl, index);
765	if (!port) {
766		dev_err(dev, "no port found for USB3 lane %u\n", index);
767		return -ENODEV;
768	}
769
770	mutex_lock(&padctl->lock);
771
772	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
773	value |= SSPX_ELPG_CLAMP_EN_EARLY(index);
774	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
775
776	usleep_range(100, 200);
777
778	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
779	value |= SSPX_ELPG_CLAMP_EN(index);
780	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
781
782	usleep_range(250, 350);
783
784	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_1);
785	value |= SSPX_ELPG_VCORE_DOWN(index);
786	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_1);
787
788	mutex_unlock(&padctl->lock);
789
790	return 0;
791}
792
793static int tegra186_usb3_phy_init(struct phy *phy)
794{
795	return 0;
796}
797
798static int tegra186_usb3_phy_exit(struct phy *phy)
799{
800	return 0;
801}
802
803static const struct phy_ops usb3_phy_ops = {
804	.init = tegra186_usb3_phy_init,
805	.exit = tegra186_usb3_phy_exit,
806	.power_on = tegra186_usb3_phy_power_on,
807	.power_off = tegra186_usb3_phy_power_off,
808	.owner = THIS_MODULE,
809};
810
811static struct tegra_xusb_pad *
812tegra186_usb3_pad_probe(struct tegra_xusb_padctl *padctl,
813			const struct tegra_xusb_pad_soc *soc,
814			struct device_node *np)
815{
816	struct tegra_xusb_usb3_pad *usb3;
817	struct tegra_xusb_pad *pad;
818	int err;
819
820	usb3 = kzalloc(sizeof(*usb3), GFP_KERNEL);
821	if (!usb3)
822		return ERR_PTR(-ENOMEM);
823
824	pad = &usb3->base;
825	pad->ops = &tegra186_usb3_lane_ops;
826	pad->soc = soc;
827
828	err = tegra_xusb_pad_init(pad, padctl, np);
829	if (err < 0) {
830		kfree(usb3);
831		goto out;
832	}
833
834	err = tegra_xusb_pad_register(pad, &usb3_phy_ops);
835	if (err < 0)
836		goto unregister;
837
838	dev_set_drvdata(&pad->dev, pad);
839
840	return pad;
841
842unregister:
843	device_unregister(&pad->dev);
844out:
845	return ERR_PTR(err);
846}
847
848static void tegra186_usb3_pad_remove(struct tegra_xusb_pad *pad)
849{
850	struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
851
852	kfree(usb2);
853}
854
855static const struct tegra_xusb_pad_ops tegra186_usb3_pad_ops = {
856	.probe = tegra186_usb3_pad_probe,
857	.remove = tegra186_usb3_pad_remove,
858};
859
860static const char * const tegra186_usb3_functions[] = {
861	"xusb",
862};
863
864static int
865tegra186_xusb_read_fuse_calibration(struct tegra186_xusb_padctl *padctl)
866{
867	struct device *dev = padctl->base.dev;
868	unsigned int i, count;
869	u32 value, *level;
870	int err;
871
872	count = padctl->base.soc->ports.usb2.count;
873
874	level = devm_kcalloc(dev, count, sizeof(u32), GFP_KERNEL);
875	if (!level)
876		return -ENOMEM;
877
878	err = tegra_fuse_readl(TEGRA_FUSE_SKU_CALIB_0, &value);
879	if (err) {
880		if (err != -EPROBE_DEFER)
881			dev_err(dev, "failed to read calibration fuse: %d\n",
882				err);
883		return err;
884	}
885
886	dev_dbg(dev, "FUSE_USB_CALIB_0 %#x\n", value);
887
888	for (i = 0; i < count; i++)
889		level[i] = (value >> HS_CURR_LEVEL_PADX_SHIFT(i)) &
890				HS_CURR_LEVEL_PAD_MASK;
891
892	padctl->calib.hs_curr_level = level;
893
894	padctl->calib.hs_squelch = (value >> HS_SQUELCH_SHIFT) &
895					HS_SQUELCH_MASK;
896	padctl->calib.hs_term_range_adj = (value >> HS_TERM_RANGE_ADJ_SHIFT) &
897						HS_TERM_RANGE_ADJ_MASK;
898
899	err = tegra_fuse_readl(TEGRA_FUSE_USB_CALIB_EXT_0, &value);
900	if (err) {
901		dev_err(dev, "failed to read calibration fuse: %d\n", err);
902		return err;
903	}
904
905	dev_dbg(dev, "FUSE_USB_CALIB_EXT_0 %#x\n", value);
906
907	padctl->calib.rpd_ctrl = (value >> RPD_CTRL_SHIFT) & RPD_CTRL_MASK;
908
909	return 0;
910}
911
912static struct tegra_xusb_padctl *
913tegra186_xusb_padctl_probe(struct device *dev,
914			   const struct tegra_xusb_padctl_soc *soc)
915{
916	struct tegra186_xusb_padctl *priv;
917	int err;
918
919	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
920	if (!priv)
921		return ERR_PTR(-ENOMEM);
922
923	priv->base.dev = dev;
924	priv->base.soc = soc;
925
926	err = tegra186_xusb_read_fuse_calibration(priv);
927	if (err < 0)
928		return ERR_PTR(err);
929
930	return &priv->base;
931}
932
933static void tegra186_xusb_padctl_remove(struct tegra_xusb_padctl *padctl)
934{
935}
936
937static const struct tegra_xusb_padctl_ops tegra186_xusb_padctl_ops = {
938	.probe = tegra186_xusb_padctl_probe,
939	.remove = tegra186_xusb_padctl_remove,
940	.vbus_override = tegra186_xusb_padctl_vbus_override,
941};
942
943#if IS_ENABLED(CONFIG_ARCH_TEGRA_186_SOC)
944static const char * const tegra186_xusb_padctl_supply_names[] = {
945	"avdd-pll-erefeut",
946	"avdd-usb",
947	"vclamp-usb",
948	"vddio-hsic",
949};
950
951static const struct tegra_xusb_lane_soc tegra186_usb2_lanes[] = {
952	TEGRA186_LANE("usb2-0", 0,  0, 0, usb2),
953	TEGRA186_LANE("usb2-1", 0,  0, 0, usb2),
954	TEGRA186_LANE("usb2-2", 0,  0, 0, usb2),
955};
956
957static const struct tegra_xusb_pad_soc tegra186_usb2_pad = {
958	.name = "usb2",
959	.num_lanes = ARRAY_SIZE(tegra186_usb2_lanes),
960	.lanes = tegra186_usb2_lanes,
961	.ops = &tegra186_usb2_pad_ops,
962};
963
964static const struct tegra_xusb_lane_soc tegra186_usb3_lanes[] = {
965	TEGRA186_LANE("usb3-0", 0,  0, 0, usb3),
966	TEGRA186_LANE("usb3-1", 0,  0, 0, usb3),
967	TEGRA186_LANE("usb3-2", 0,  0, 0, usb3),
968};
969
970static const struct tegra_xusb_pad_soc tegra186_usb3_pad = {
971	.name = "usb3",
972	.num_lanes = ARRAY_SIZE(tegra186_usb3_lanes),
973	.lanes = tegra186_usb3_lanes,
974	.ops = &tegra186_usb3_pad_ops,
975};
976
977static const struct tegra_xusb_pad_soc * const tegra186_pads[] = {
978	&tegra186_usb2_pad,
979	&tegra186_usb3_pad,
980#if 0 /* TODO implement */
981	&tegra186_hsic_pad,
982#endif
983};
984
985const struct tegra_xusb_padctl_soc tegra186_xusb_padctl_soc = {
986	.num_pads = ARRAY_SIZE(tegra186_pads),
987	.pads = tegra186_pads,
988	.ports = {
989		.usb2 = {
990			.ops = &tegra186_usb2_port_ops,
991			.count = 3,
992		},
993#if 0 /* TODO implement */
994		.hsic = {
995			.ops = &tegra186_hsic_port_ops,
996			.count = 1,
997		},
998#endif
999		.usb3 = {
1000			.ops = &tegra186_usb3_port_ops,
1001			.count = 3,
1002		},
1003	},
1004	.ops = &tegra186_xusb_padctl_ops,
1005	.supply_names = tegra186_xusb_padctl_supply_names,
1006	.num_supplies = ARRAY_SIZE(tegra186_xusb_padctl_supply_names),
1007};
1008EXPORT_SYMBOL_GPL(tegra186_xusb_padctl_soc);
1009#endif
1010
1011#if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC)
1012static const char * const tegra194_xusb_padctl_supply_names[] = {
1013	"avdd-usb",
1014	"vclamp-usb",
1015};
1016
1017static const struct tegra_xusb_lane_soc tegra194_usb2_lanes[] = {
1018	TEGRA186_LANE("usb2-0", 0,  0, 0, usb2),
1019	TEGRA186_LANE("usb2-1", 0,  0, 0, usb2),
1020	TEGRA186_LANE("usb2-2", 0,  0, 0, usb2),
1021	TEGRA186_LANE("usb2-3", 0,  0, 0, usb2),
1022};
1023
1024static const struct tegra_xusb_pad_soc tegra194_usb2_pad = {
1025	.name = "usb2",
1026	.num_lanes = ARRAY_SIZE(tegra194_usb2_lanes),
1027	.lanes = tegra194_usb2_lanes,
1028	.ops = &tegra186_usb2_pad_ops,
1029};
1030
1031static const struct tegra_xusb_lane_soc tegra194_usb3_lanes[] = {
1032	TEGRA186_LANE("usb3-0", 0,  0, 0, usb3),
1033	TEGRA186_LANE("usb3-1", 0,  0, 0, usb3),
1034	TEGRA186_LANE("usb3-2", 0,  0, 0, usb3),
1035	TEGRA186_LANE("usb3-3", 0,  0, 0, usb3),
1036};
1037
1038static const struct tegra_xusb_pad_soc tegra194_usb3_pad = {
1039	.name = "usb3",
1040	.num_lanes = ARRAY_SIZE(tegra194_usb3_lanes),
1041	.lanes = tegra194_usb3_lanes,
1042	.ops = &tegra186_usb3_pad_ops,
1043};
1044
1045static const struct tegra_xusb_pad_soc * const tegra194_pads[] = {
1046	&tegra194_usb2_pad,
1047	&tegra194_usb3_pad,
1048};
1049
1050const struct tegra_xusb_padctl_soc tegra194_xusb_padctl_soc = {
1051	.num_pads = ARRAY_SIZE(tegra194_pads),
1052	.pads = tegra194_pads,
1053	.ports = {
1054		.usb2 = {
1055			.ops = &tegra186_usb2_port_ops,
1056			.count = 4,
1057		},
1058		.usb3 = {
1059			.ops = &tegra186_usb3_port_ops,
1060			.count = 4,
1061		},
1062	},
1063	.ops = &tegra186_xusb_padctl_ops,
1064	.supply_names = tegra194_xusb_padctl_supply_names,
1065	.num_supplies = ARRAY_SIZE(tegra194_xusb_padctl_supply_names),
1066	.supports_gen2 = true,
1067};
1068EXPORT_SYMBOL_GPL(tegra194_xusb_padctl_soc);
1069#endif
1070
1071MODULE_AUTHOR("JC Kuo <jckuo@nvidia.com>");
1072MODULE_DESCRIPTION("NVIDIA Tegra186 XUSB Pad Controller driver");
1073MODULE_LICENSE("GPL v2");
1074