Skip to contentSkip to conversation

Support UDC on Tegra 20/30/114/124

PATCH Superseded Dmitry Osipenko 3 participants 14 messages Jul 27, 2017 – Jul 31, 2017 5 messages not in the archive

Subsystems (5)

v2 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

v2 cover Support UDC on Tegra 20/30/114/124

Some time ago Thierry Reding sent out patches that enabled UDC on NVIDIA Tegra, unfortunately they haven't got enough traction to get into the kernel. I've rebased those patches and added a fix for the Ethernet USB Gadget on Tegra20, Marc Dietrich tested UDC driver on AC100 and Nicolas Chauvet on TK1. Like an original patchset, this series adds support for the peripheral mode only.

Changelog:

V2:
1) Added comments to each of patched USB Ethernet gadget models.

2) Added explanatory comment about why usb_phy_set_suspend() invocation is necessary in tegra_udc_probe().

3) Dropped TrimSlice from patchset because it turned out that it uses USB1 controller for USB-to-SATA.

4) Moved tegra_defconfig patch before DT patches as per Stephen's suggestion.

5) Changed dr_mode to "peripheral" in DT patches since we don't support role mode switching for now.

Dmitry Osipenko (4):
usb: gadget: f_ecm/f_eem/f_rndis: Setup quirk_avoids_skb_reserve
usb: chipidea: udc: Support SKB alignment quirk
ARM: defconfig: tegra: Enable ChipIdea UDC driver
ARM: tegra: Enable UDC on AC100

Thierry Reding (4):
usb: chipidea: Add support for Tegra20/30/114/124
ARM: tegra: Enable UDC on Beaver
ARM: tegra: Enable UDC on Dalmore
ARM: tegra: Enable UDC on Jetson TK1

 arch/arm/boot/dts/tegra114-dalmore.dts    |  10 ++
 arch/arm/boot/dts/tegra124-jetson-tk1.dts |  12 ++-
 arch/arm/boot/dts/tegra20-paz00.dts       |   2 +
 arch/arm/boot/dts/tegra30-beaver.dts      |  10 ++
 arch/arm/configs/tegra_defconfig          |  10 +-
 drivers/usb/chipidea/Makefile             |   1 +
 drivers/usb/chipidea/ci_hdrc_tegra.c      | 160 ++++++++++++++++++++++++++++++
 drivers/usb/chipidea/udc.c                |   3 +
 drivers/usb/gadget/function/f_ecm.c       |   7 ++
 drivers/usb/gadget/function/f_eem.c       |   5 +
 drivers/usb/gadget/function/f_rndis.c     |   4 +
 include/linux/usb/chipidea.h              |   1 +
 12 files changed, 219 insertions(+), 6 deletions(-)
 create mode 100644 drivers/usb/chipidea/ci_hdrc_tegra.c
Signature · 1 line
2.13.3

A message that is not in the archive (sent off-list or not yet received): cover.1501173271.git.digetx-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

#2 lore raw

PATCH v2 1/8 usb: gadget: f_ecm/f_eem/f_rndis: Setup quirk_avoids_skb_reserve

This quirk is required to make USB Ethernet gadget working with HW that can't cope with unaligned DMA. For some reason only f_ncm handles that quirk, let's handle it in the rest of the network models. All models have been tested with a ChipIdea UDC driver on NVIDIA Tegra20 SoC that require DMA to be aligned.

---
 drivers/usb/gadget/function/f_ecm.c   | 7 +++++++
 drivers/usb/gadget/function/f_eem.c   | 5 +++++
 drivers/usb/gadget/function/f_rndis.c | 4 ++++
 3 files changed, 16 insertions(+)
drivers/usb/gadget/function/f_ecm.c +7 -0
index 4c488d15b6f6..1d198055fd74 100644
@@ -584,6 +584,13 @@ static int ecm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 			 */
 			ecm->port.is_zlp_ok =
 				gadget_is_zlp_supported(cdev->gadget);
+
+			/* Setup DMA alignment workaround for UDC's that
+			 * need it.
+			 */
+			ecm->port.no_skb_reserve =
+				gadget_avoids_skb_reserve(cdev->gadget);
+
 			ecm->port.cdc_filter = DEFAULT_FILTER;
 			DBG(cdev, "activate ecm\n");
 			net = gether_connect(&ecm->port);
drivers/usb/gadget/function/f_eem.c +5 -0
index 007ec6e4a5d4..74e2453d8ac5 100644
@@ -215,6 +215,11 @@ static int eem_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 		 */
 		eem->port.is_zlp_ok = 1;
 		eem->port.cdc_filter = DEFAULT_FILTER;
+
+		/* setup DMA alignment workaround for UDC's that*need it */
+		eem->port.no_skb_reserve =
+				gadget_avoids_skb_reserve(cdev->gadget);
+
 		DBG(cdev, "activate eem\n");
 		net = gether_connect(&eem->port);
 		if (IS_ERR(net))
drivers/usb/gadget/function/f_rndis.c +4 -0
index 16562e461121..1b379c051a84 100644
@@ -593,6 +593,10 @@ static int rndis_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 		 */
 		rndis->port.cdc_filter = 0;
 
+		/* Setup DMA alignment workaround for UDC's that need it */
+		rndis->port.no_skb_reserve =
+				gadget_avoids_skb_reserve(cdev->gadget);
+
 		DBG(cdev, "RNDIS RX/TX early activation ... \n");
 		net = gether_connect(&rndis->port);
 		if (IS_ERR(net))
Signature · 1 line
2.13.3
#3 lore raw

PATCH v2 2/8 usb: chipidea: udc: Support SKB alignment quirk

In reply to a message not in the archive

NVIDIA Tegra20 UDC can't cope with unaligned DMA and require a USB gadget quirk that avoids SKB buffer alignment to be set in order to make Ethernet Gadget working. Later Tegra generations do not require that quirk. Let's add a new platform data flag that allows to enable USB gadget quirk for platforms that require it.

---
 drivers/usb/chipidea/udc.c   | 3 +++
 include/linux/usb/chipidea.h | 1 +
 2 files changed, 4 insertions(+)
drivers/usb/chipidea/udc.c +3 -0
index 6502c13331e8..fe8a90543ea3 100644
@@ -1896,6 +1896,9 @@ static int udc_start(struct ci_hdrc *ci)
 	ci->gadget.name         = ci->platdata->name;
 	ci->gadget.otg_caps	= otg_caps;
 
+	if (ci->platdata->flags & CI_HDRC_REQUIRES_ALIGNED_DMA)
+		ci->gadget.quirk_avoids_skb_reserve = 1;
+
 	if (ci->is_otg && (otg_caps->hnp_support || otg_caps->srp_support ||
 						otg_caps->adp_support))
 		ci->gadget.is_otg = 1;
include/linux/usb/chipidea.h +1 -0
index c5fdfcf99828..d725cff7268d 100644
@@ -58,6 +58,7 @@ struct ci_hdrc_platform_data {
 #define CI_HDRC_OVERRIDE_TX_BURST	BIT(10)
 #define CI_HDRC_OVERRIDE_RX_BURST	BIT(11)
 #define CI_HDRC_OVERRIDE_PHY_CONTROL	BIT(12) /* Glue layer manages phy */
+#define CI_HDRC_REQUIRES_ALIGNED_DMA	BIT(13)
 	enum usb_dr_mode	dr_mode;
 #define CI_HDRC_CONTROLLER_RESET_EVENT		0
 #define CI_HDRC_CONTROLLER_STOPPED_EVENT	1
Signature · 1 line
2.13.3
#4 lore raw

PATCH v2 3/8 usb: chipidea: Add support for Tegra20/30/114/124

In reply to a message not in the archive

From: Thierry Reding <[email protected]>

All of these Tegra SoC generations have a ChipIdea UDC IP block that can be used for device mode communication with a host. Implement rudimentary support that doesn't allow switching between host and device modes.

[[email protected]: rebased patches and added DMA alignment quirk for Tegra20]
---
 drivers/usb/chipidea/Makefile        |   1 +
 drivers/usb/chipidea/ci_hdrc_tegra.c | 160 +++++++++++++++++++++++++++++++++++
 2 files changed, 161 insertions(+)
 create mode 100644 drivers/usb/chipidea/ci_hdrc_tegra.c
drivers/usb/chipidea/Makefile +1 -0
index 39fca5715ed3..ddcbddf8361a 100644
@@ -15,3 +15,4 @@ obj-$(CONFIG_USB_CHIPIDEA)	+= ci_hdrc_zevio.o
 obj-$(CONFIG_USB_CHIPIDEA_PCI)	+= ci_hdrc_pci.o
 
 obj-$(CONFIG_USB_CHIPIDEA_OF)	+= usbmisc_imx.o ci_hdrc_imx.o
+obj-$(CONFIG_USB_CHIPIDEA_OF)	+= ci_hdrc_tegra.o
drivers/usb/chipidea/ci_hdrc_tegra.c new file +160 -0

160 lines not on this page · raw message

Signature · 1 line
2.13.3

A message that is not in the archive (sent off-list or not yet received): f103baa439a64b517e6c8cb51c30e81987dfedb3.1501173271.git.digetx-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

#6 lore raw

Re: [PATCH v2 3/8] usb: chipidea: Add support for Tegra20/30/114/124

Quoted 10 lines · Dmitry Osipenko

From: Thierry Reding <[email protected]>

All of these Tegra SoC generations have a ChipIdea UDC IP block that can be used for device mode communication with a host. Implement rudimentary support that doesn't allow switching between host and device modes.

[[email protected]: rebased patches and added DMA alignment quirk for Tegra20]

This works on my Asus TF300T (Tegra3 device). Minor nit below.

[...]

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +0 -0
new file mode 100644
index 000000000000..7814500e71fa
@@ -0,0 +1,160 @@

[...]

Quoted 3 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +3 -0
+struct tegra_udc_soc_info {
+	bool supports_unaligned_dma;
+};

[...]

Quoted 34 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +34 -0
+static const struct tegra_udc_soc_info tegra20_udc_soc_info = {
+	.supports_unaligned_dma = false,
+};
+
+static const struct tegra_udc_soc_info tegra30_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra114_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra124_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct of_device_id tegra_udc_of_match[] = {
+	{
+		.compatible = "nvidia,tegra20-udc",
+		.data = &tegra20_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra30-udc",
+		.data = &tegra30_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra114-udc",
+		.data = &tegra114_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra124-udc",
+		.data = &tegra124_udc_soc_info,
+	}, {
+		/* sentinel */
+	}
+};
+MODULE_DEVICE_TABLE(of, tegra_udc_of_match);

[...]

Quoted 2 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +2 -0
+static int tegra_udc_probe(struct platform_device *pdev)
+{

[...]

drivers/usb/chipidea/ci_hdrc_tegra.c line 110

Quoted 5 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +5 -0
+	/* setup device specific quirks */
+	soc = id->data;
+
+	if (!soc->supports_unaligned_dma)
+		udc->data.flags |= CI_HDRC_REQUIRES_ALIGNED_DMA;

[...]

Some lines would be saved if this was just:

udc->data.flags |= id->data;

Best Regards,
Michał Mirosław

A message that is not in the archive (sent off-list or not yet received): 20170727223223.ezyzvmum7c773vel-cHozx32mtrEEUmgCuDUIdw@public.gmane.org

#8 lore raw

Re: [PATCH v2 3/8] usb: chipidea: Add support for Tegra20/30/114/124

Quoted 7 lines · Michał Mirosław
Quoted 6 lines · Dmitry Osipenko

From: Thierry Reding <[email protected]>

All of these Tegra SoC generations have a ChipIdea UDC IP block that can be used for device mode communication with a host. Implement rudimentary support that doesn't allow switching between host and device modes.

Quoted 9 lines
Quoted 4 lines
[[email protected]: rebased patches and added DMA alignment quirk for Tegra20]

This works on my Asus TF300T (Tegra3 device). Minor nit below.

Nice, thank you!

Quoted 57 lines

[...]

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +0 -0
new file mode 100644
index 000000000000..7814500e71fa
@@ -0,0 +1,160 @@

[...]

Quoted 3 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +3 -0
+struct tegra_udc_soc_info {
+	bool supports_unaligned_dma;
+};

[...]

Quoted 34 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +34 -0
+static const struct tegra_udc_soc_info tegra20_udc_soc_info = {
+	.supports_unaligned_dma = false,
+};
+
+static const struct tegra_udc_soc_info tegra30_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra114_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra124_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct of_device_id tegra_udc_of_match[] = {
+	{
+		.compatible = "nvidia,tegra20-udc",
+		.data = &tegra20_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra30-udc",
+		.data = &tegra30_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra114-udc",
+		.data = &tegra114_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra124-udc",
+		.data = &tegra124_udc_soc_info,
+	}, {
+		/* sentinel */
+	}
+};
+MODULE_DEVICE_TABLE(of, tegra_udc_of_match);

[...]

Quoted 2 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +2 -0
+static int tegra_udc_probe(struct platform_device *pdev)
+{

[...]

Quoted 5 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +5 -0
+	/* setup device specific quirks */
+	soc = id->data;
+
+	if (!soc->supports_unaligned_dma)
+		udc->data.flags |= CI_HDRC_REQUIRES_ALIGNED_DMA;

[...]

Quoted 4 lines

Some lines would be saved if this was just:

udc->data.flags |= id->data;

I think a verbose approach is more preferable and it also more future proof since we may extend soc_info with other stuff later.

Signature · 1 line
Dmitry

A message that is not in the archive (sent off-list or not yet received): 832adea3-b5f2-a28c-6be4-0f572052821b-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org

#10 lore raw

Re: [PATCH v2 3/8] usb: chipidea: Add support for Tegra20/30/114/124

Quoted 77 lines · Dmitry Osipenko
Quoted 7 lines · Michał Mirosław
Quoted 6 lines · Dmitry Osipenko

From: Thierry Reding <[email protected]>

All of these Tegra SoC generations have a ChipIdea UDC IP block that can be used for device mode communication with a host. Implement rudimentary support that doesn't allow switching between host and device modes.

Quoted 9 lines
Quoted 4 lines
[[email protected]: rebased patches and added DMA alignment quirk for Tegra20]

This works on my Asus TF300T (Tegra3 device). Minor nit below.

Nice, thank you!

Quoted 57 lines

[...]

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +0 -0
new file mode 100644
index 000000000000..7814500e71fa
@@ -0,0 +1,160 @@

[...]

Quoted 3 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +3 -0
+struct tegra_udc_soc_info {
+	bool supports_unaligned_dma;
+};

[...]

Quoted 34 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +34 -0
+static const struct tegra_udc_soc_info tegra20_udc_soc_info = {
+	.supports_unaligned_dma = false,
+};
+
+static const struct tegra_udc_soc_info tegra30_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra114_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra124_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct of_device_id tegra_udc_of_match[] = {
+	{
+		.compatible = "nvidia,tegra20-udc",
+		.data = &tegra20_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra30-udc",
+		.data = &tegra30_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra114-udc",
+		.data = &tegra114_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra124-udc",
+		.data = &tegra124_udc_soc_info,
+	}, {
+		/* sentinel */
+	}
+};
+MODULE_DEVICE_TABLE(of, tegra_udc_of_match);

[...]

Quoted 2 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +2 -0
+static int tegra_udc_probe(struct platform_device *pdev)
+{

[...]

Quoted 5 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +5 -0
+	/* setup device specific quirks */
+	soc = id->data;
+
+	if (!soc->supports_unaligned_dma)
+		udc->data.flags |= CI_HDRC_REQUIRES_ALIGNED_DMA;

[...]

Quoted 7 lines
Quoted 4 lines

Some lines would be saved if this was just:

udc->data.flags |= id->data;

I think a verbose approach is more preferable and it also more future proof since we may extend soc_info with other stuff later.

I would just leave that to be done when it's needed. :-)

Or you could just have udc_flags in struct tegra_udc_soc_info, so that it would not need to be translated - again saving code, bugs and future developers' time.

Best Regards,
Michał Mirosław

A message that is not in the archive (sent off-list or not yet received): 20170728155115.kn2o7iei5yhzmpdq-cHozx32mtrEEUmgCuDUIdw@public.gmane.org

#12 lore raw

Re: [PATCH v2 3/8] usb: chipidea: Add support for Tegra20/30/114/124

Quoted 78 lines · Michał Mirosław
Quoted 77 lines · Dmitry Osipenko
Quoted 7 lines · Michał Mirosław
Quoted 6 lines · Dmitry Osipenko

From: Thierry Reding <[email protected]>

All of these Tegra SoC generations have a ChipIdea UDC IP block that can be used for device mode communication with a host. Implement rudimentary support that doesn't allow switching between host and device modes.

Quoted 9 lines
Quoted 4 lines
[[email protected]: rebased patches and added DMA alignment quirk for Tegra20]

This works on my Asus TF300T (Tegra3 device). Minor nit below.

Nice, thank you!

Quoted 57 lines

[...]

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +0 -0
new file mode 100644
index 000000000000..7814500e71fa
@@ -0,0 +1,160 @@

[...]

Quoted 3 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +3 -0
+struct tegra_udc_soc_info {
+	bool supports_unaligned_dma;
+};

[...]

Quoted 34 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +34 -0
+static const struct tegra_udc_soc_info tegra20_udc_soc_info = {
+	.supports_unaligned_dma = false,
+};
+
+static const struct tegra_udc_soc_info tegra30_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra114_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra124_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct of_device_id tegra_udc_of_match[] = {
+	{
+		.compatible = "nvidia,tegra20-udc",
+		.data = &tegra20_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra30-udc",
+		.data = &tegra30_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra114-udc",
+		.data = &tegra114_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra124-udc",
+		.data = &tegra124_udc_soc_info,
+	}, {
+		/* sentinel */
+	}
+};
+MODULE_DEVICE_TABLE(of, tegra_udc_of_match);

[...]

Quoted 2 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +2 -0
+static int tegra_udc_probe(struct platform_device *pdev)
+{

[...]

Quoted 5 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +5 -0
+	/* setup device specific quirks */
+	soc = id->data;
+
+	if (!soc->supports_unaligned_dma)
+		udc->data.flags |= CI_HDRC_REQUIRES_ALIGNED_DMA;

[...]

Quoted 4 lines
Quoted 4 lines
Quoted 4 lines

Some lines would be saved if this was just:

udc->data.flags |= id->data;

I prefer this way too, and add CI_HDRC_REQUIRES_ALIGNED_DMA as platform flags for necessary SoCs.

Peter

Quoted 16 lines
Quoted 3 lines

I think a verbose approach is more preferable and it also more future proof since we may extend soc_info with other stuff later.

I would just leave that to be done when it's needed. :-)

Or you could just have udc_flags in struct tegra_udc_soc_info, so that it would not need to be translated - again saving code, bugs and future developers' time.

Best Regards,
Michał Mirosław
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

Signature · 2 lines
Best Regards,
Peter Chen
#13 lore raw

Re: [PATCH v2 3/8] usb: chipidea: Add support for Tegra20/30/114/124

Quoted 79 lines · Peter Chen
Quoted 78 lines · Michał Mirosław
Quoted 77 lines · Dmitry Osipenko
Quoted 7 lines · Michał Mirosław
Quoted 6 lines · Dmitry Osipenko

From: Thierry Reding <[email protected]>

All of these Tegra SoC generations have a ChipIdea UDC IP block that can be used for device mode communication with a host. Implement rudimentary support that doesn't allow switching between host and device modes.

Quoted 9 lines
Quoted 4 lines
[[email protected]: rebased patches and added DMA alignment quirk for Tegra20]

This works on my Asus TF300T (Tegra3 device). Minor nit below.

Nice, thank you!

Quoted 57 lines

[...]

Quoted 6 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +0 -0
new file mode 100644
index 000000000000..7814500e71fa
@@ -0,0 +1,160 @@

[...]

Quoted 3 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +3 -0
+struct tegra_udc_soc_info {
+	bool supports_unaligned_dma;
+};

[...]

Quoted 34 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +34 -0
+static const struct tegra_udc_soc_info tegra20_udc_soc_info = {
+	.supports_unaligned_dma = false,
+};
+
+static const struct tegra_udc_soc_info tegra30_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra114_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct tegra_udc_soc_info tegra124_udc_soc_info = {
+	.supports_unaligned_dma = true,
+};
+
+static const struct of_device_id tegra_udc_of_match[] = {
+	{
+		.compatible = "nvidia,tegra20-udc",
+		.data = &tegra20_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra30-udc",
+		.data = &tegra30_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra114-udc",
+		.data = &tegra114_udc_soc_info,
+	}, {
+		.compatible = "nvidia,tegra124-udc",
+		.data = &tegra124_udc_soc_info,
+	}, {
+		/* sentinel */
+	}
+};
+MODULE_DEVICE_TABLE(of, tegra_udc_of_match);

[...]

Quoted 2 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +2 -0
+static int tegra_udc_probe(struct platform_device *pdev)
+{

[...]

Quoted 5 lines
drivers/usb/chipidea/ci_hdrc_tegra.c new file +5 -0
+	/* setup device specific quirks */
+	soc = id->data;
+
+	if (!soc->supports_unaligned_dma)
+		udc->data.flags |= CI_HDRC_REQUIRES_ALIGNED_DMA;

[...]

Quoted 8 lines
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines

Some lines would be saved if this was just:

udc->data.flags |= id->data;

I prefer this way too, and add CI_HDRC_REQUIRES_ALIGNED_DMA as platform flags for necessary SoCs.

Okay, please let me know if there are any other nitpicks.

Signature · 1 line
Dmitry
#14 lore raw

PATCH v2 4/8 ARM: defconfig: tegra: Enable ChipIdea UDC driver

In reply to a message not in the archive

Since NVIDIA Tegra is supported now by the ChipIdea USB driver, let's enable this driver in tegra_defconfig.

---
 arch/arm/configs/tegra_defconfig | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/configs/tegra_defconfig +5 -5
index f0efc854b5a2..b0ebe6631602 100644
@@ -121,7 +121,6 @@ CONFIG_TOUCHSCREEN_WM97XX=y
 CONFIG_TOUCHSCREEN_STMPE=y
 CONFIG_INPUT_MISC=y
 # CONFIG_LEGACY_PTYS is not set
-# CONFIG_DEVKMEM is not set
 CONFIG_SERIAL_8250=y
 CONFIG_SERIAL_8250_CONSOLE=y
 CONFIG_SERIAL_OF_PLATFORM=y
@@ -218,6 +217,9 @@ CONFIG_USB_EHCI_TEGRA=y
 CONFIG_USB_ACM=y
 CONFIG_USB_WDM=y
 CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_GADGET=m
 CONFIG_MMC=y
 CONFIG_MMC_BLOCK_MINORS=16
 CONFIG_MMC_SDHCI=y
@@ -247,8 +249,6 @@ CONFIG_RTC_DRV_TEGRA=y
 CONFIG_DMADEVICES=y
 CONFIG_TEGRA20_APB_DMA=y
 CONFIG_STAGING=y
-CONFIG_SENSORS_ISL29018=y
-CONFIG_SENSORS_ISL29028=y
 CONFIG_MFD_NVEC=y
 CONFIG_KEYBOARD_NVEC=y
 CONFIG_SERIO_NVEC_PS2=y
@@ -263,6 +263,8 @@ CONFIG_ARCH_TEGRA_124_SOC=y
 CONFIG_MEMORY=y
 CONFIG_IIO=y
 CONFIG_MPU3050_I2C=y
+CONFIG_SENSORS_ISL29018=y
+CONFIG_SENSORS_ISL29028=y
 CONFIG_AK8975=y
 CONFIG_PWM=y
 CONFIG_PWM_TEGRA=y
@@ -288,13 +290,11 @@ CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_SLAB=y
 CONFIG_DEBUG_VM=y
 CONFIG_DETECT_HUNG_TASK=y
 CONFIG_SCHEDSTATS=y
-CONFIG_TIMER_STATS=y
 # CONFIG_DEBUG_PREEMPT is not set
 CONFIG_DEBUG_MUTEXES=y
 CONFIG_DEBUG_SG=y
Signature · 1 line
2.13.3
#15 lore raw

PATCH v2 5/8 ARM: tegra: Enable UDC on Beaver

In reply to a message not in the archive

From: Thierry Reding <[email protected]>

Override the compatible string of the first USB controller to enable device mode.

---
 arch/arm/boot/dts/tegra30-beaver.dts | 10 ++++++++++
 1 file changed, 10 insertions(+)
arch/arm/boot/dts/tegra30-beaver.dts +10 -0
index 4f41b18d9547..3e104ddeb220 100644
@@ -1927,6 +1927,16 @@
 		non-removable;
 	};
 
+	usb@7d000000 {
+		compatible = "nvidia,tegra30-udc";
+		status = "okay";
+		dr_mode = "peripheral";
+	};
+
+	usb-phy@7d000000 {
+		status = "okay";
+	};
+
 	usb@7d004000 {
 		status = "okay";
 	};
Signature · 1 line
2.13.3
#16 lore raw

PATCH v2 6/8 ARM: tegra: Enable UDC on Dalmore

In reply to a message not in the archive

From: Thierry Reding <[email protected]>

Override the compatible string of the first USB controller to enable device mode.

---
 arch/arm/boot/dts/tegra114-dalmore.dts | 10 ++++++++++
 1 file changed, 10 insertions(+)
arch/arm/boot/dts/tegra114-dalmore.dts +10 -0
index 1444fbd543e7..5af4dd321952 100644
@@ -1122,6 +1122,16 @@
 		non-removable;
 	};
 
+	usb@7d000000 {
+		compatible = "nvidia,tegra114-udc";
+		status = "okay";
+		dr_mode = "peripheral";
+	};
+
+	usb-phy@7d000000 {
+		status = "okay";
+	};
+
 	usb@7d008000 {
 		status = "okay";
 	};
Signature · 6 lines
2.13.3

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#17 lore raw

PATCH v2 7/8 ARM: tegra: Enable UDC on Jetson TK1

In reply to a message not in the archive

From: Thierry Reding <[email protected]>

Override the compatible string of the first USB controller to enable device mode.

---
 arch/arm/boot/dts/tegra124-jetson-tk1.dts | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
arch/arm/boot/dts/tegra124-jetson-tk1.dts +11 -1
index 7bacb2954f58..61873d642a45 100644
@@ -1722,7 +1722,7 @@
 
 				lanes {
 					usb2-0 {
-						nvidia,function = "xusb";
+						nvidia,function = "snps";
 						status = "okay";
 					};
 
@@ -1829,6 +1829,16 @@
 		};
 	};
 
+	usb@7d000000 {
+		compatible = "nvidia,tegra124-udc";
+		status = "okay";
+		dr_mode = "peripheral";
+	};
+
+	usb-phy@7d000000 {
+		status = "okay";
+	};
+
 	/* mini-PCIe USB */
 	usb@7d004000 {
 		status = "okay";
Signature · 1 line
2.13.3
#18 lore raw

PATCH v2 8/8 ARM: tegra: Enable UDC on AC100

In reply to a message not in the archive

Override the compatible string of the first USB controller to enable device mode.

---
 arch/arm/boot/dts/tegra20-paz00.dts | 2 ++
 1 file changed, 2 insertions(+)
arch/arm/boot/dts/tegra20-paz00.dts +2 -0
index b4bfa5586c23..bfa9421fcf94 100644
@@ -452,7 +452,9 @@
 	};
 
 	usb@c5000000 {
+		compatible = "nvidia,tegra20-udc";
 		status = "okay";
+		dr_mode = "peripheral";
 	};
 
 	usb-phy@c5000000 {
Signature · 1 line
2.13.3