Skip to contentSkip to conversation

Fix USB port indexes for USB gadget commands

PATCH New Jean-Jacques Hiblot 4 participants 6 messages Dec 15, 2018 – Jan 3, 2019

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover Fix USB port indexes for USB gadget commands

The USB gadget commands take the USB port index as a parameter. This is not playing well with the current DM support for gadget when USB0 is dedicated to host and USB1 dedicated to gadget.
This problem has been reported by Sam Protsenko <[email protected]>

This patch fixes this by using the aliases provided by the DT to get the port index right.

Tested on:
- dra76 evm
- am572 evm

Jean-Jacques Hiblot (2):
dm: usb: udc: Use SEQ_ALIAS to index the USB gadget ports
ARM: dts: define USB aliases for all omap5 platforms

 arch/arm/dts/omap5-u-boot.dtsi      | 5 +++++
 drivers/usb/gadget/udc/udc-uclass.c | 5 +++--
 2 files changed, 8 insertions(+), 2 deletions(-)
Signature · 1 line
2.7.4
#1 lore raw

PATCH 1/2 dm: usb: udc: Use SEQ_ALIAS to index the USB gadget ports

dfu, fastbot and other usb gadget commands take the USB port index as a parameter. Currently this index is assigned in the order of the driver bindings.
Changing this behavior using the SEQ_ALIAS feature. This option assign to the device a SEQ number based on its alias (if it exists)

To use it we must set the DM_UC_FLAG_SEQ_ALIAS flag and follow the existing naming convention: use "usb" for the name of the gadget UCLASS_DRIVER (same as for the UCLASS_USB).

If no alias is provided, then the index falls back to the order in which the bindings took place.

---

 drivers/usb/gadget/udc/udc-uclass.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/usb/gadget/udc/udc-uclass.c +3 -2
index 0620518..e9f8f5f 100644
@@ -20,7 +20,7 @@ int usb_gadget_initialize(int index)
 		return -EINVAL;
 	if (dev_array[index])
 		return 0;
-	ret = uclass_get_device(UCLASS_USB_GADGET_GENERIC, index, &dev);
+	ret = uclass_get_device_by_seq(UCLASS_USB_GADGET_GENERIC, index, &dev);
 	if (!dev || ret) {
 		pr_err("No USB device found\n");
 		return -ENODEV;
@@ -54,5 +54,6 @@ int usb_gadget_handle_interrupts(int index)
 
 UCLASS_DRIVER(usb_gadget_generic) = {
 	.id		= UCLASS_USB_GADGET_GENERIC,
-	.name		= "usb_gadget_generic",
+	.name		= "usb",
+	.flags		= DM_UC_FLAG_SEQ_ALIAS,
 };
Signature · 1 line
2.7.4
#2 lore raw

PATCH 1/2 dm: usb: udc: Use SEQ_ALIAS to index the USB gadget ports

Quoted 1 line · Jean-Jacques Hiblot

dfu, fastbot and other usb gadget commands take the USB port index as a

fastboot.

Looks good to me, I expect Lukasz to pick it, test it and send me a PR.

Quoted 41 lines

parameter. Currently this index is assigned in the order of the driver bindings.
Changing this behavior using the SEQ_ALIAS feature. This option assign to the device a SEQ number based on its alias (if it exists)

To use it we must set the DM_UC_FLAG_SEQ_ALIAS flag and follow the existing naming convention: use "usb" for the name of the gadget UCLASS_DRIVER (same as for the UCLASS_USB).

If no alias is provided, then the index falls back to the order in which the bindings took place.

---

 drivers/usb/gadget/udc/udc-uclass.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/usb/gadget/udc/udc-uclass.c +3 -2
index 0620518..e9f8f5f 100644
@@ -20,7 +20,7 @@ int usb_gadget_initialize(int index)
 		return -EINVAL;
 	if (dev_array[index])
 		return 0;
-	ret = uclass_get_device(UCLASS_USB_GADGET_GENERIC, index, &dev);
+	ret = uclass_get_device_by_seq(UCLASS_USB_GADGET_GENERIC, index, &dev);
 	if (!dev || ret) {
 		pr_err("No USB device found\n");
 		return -ENODEV;
@@ -54,5 +54,6 @@ int usb_gadget_handle_interrupts(int index)
 
 UCLASS_DRIVER(usb_gadget_generic) = {
 	.id		= UCLASS_USB_GADGET_GENERIC,
-	.name		= "usb_gadget_generic",
+	.name		= "usb",
+	.flags		= DM_UC_FLAG_SEQ_ALIAS,
 };
Signature · 2 lines
Best regards,
Marek Vasut
#3 lore raw

PATCH 1/2 dm: usb: udc: Use SEQ_ALIAS to index the USB gadget ports

Hi Marek, Jean-Jacques,

Quoted 17 lines · Jean-Jacques Hiblot
Quoted 2 lines

dfu, fastbot and other usb gadget commands take the USB port index as a

fastboot.

Looks good to me, I expect Lukasz to pick it, test it and send me a PR.

Quoted 8 lines

parameter. Currently this index is assigned in the order of the driver bindings.
Changing this behavior using the SEQ_ALIAS feature. This option assign to the device a SEQ number based on its alias (if it exists)

To use it we must set the DM_UC_FLAG_SEQ_ALIAS flag and follow the existing naming convention: use "usb" for the name of the gadget UCLASS_DRIVER (same as for the UCLASS_USB).

I must admit that this change fixes a long standing problem with the usb number assignment.

Great job. I will test and send it in a few days time.

Quoted 27 lines
Quoted 27 lines

If no alias is provided, then the index falls back to the order in which the bindings took place.

---

 drivers/usb/gadget/udc/udc-uclass.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
(quoted diff) +0 -0

b/drivers/usb/gadget/udc/udc-uclass.c index 0620518..e9f8f5f 100644

drivers/usb/gadget/udc/udc-uclass.c +1 -1
@@ -20,7 +20,7 @@ int usb_gadget_initialize(int index)
 		return -EINVAL;
 	if (dev_array[index])
 		return 0;
-	ret = uclass_get_device(UCLASS_USB_GADGET_GENERIC, index,
 &dev);
+	ret = uclass_get_device_by_seq(UCLASS_USB_GADGET_GENERIC,
 index, &dev); if (!dev || ret) {
 		pr_err("No USB device found\n");
drivers/usb/gadget/udc/udc-uclass.c +0 -0
 		return -ENODEV;
@@ -54,5 +54,6 @@ int usb_gadget_handle_interrupts(int index)
 
Quoted 9 lines

drivers/usb/gadget/udc/udc-uclass.c int usb_gadget_handle_interrupts(int index) · line 59

Quoted 7 lines
drivers/usb/gadget/udc/udc-uclass.c +2 -1
 UCLASS_DRIVER(usb_gadget_generic) = {
 	.id		= UCLASS_USB_GADGET_GENERIC,
-	.name		= "usb_gadget_generic",
+	.name		= "usb",
+	.flags		= DM_UC_FLAG_SEQ_ALIAS,
 };

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181216/7635e6e2/attachment.sig>

#4 lore raw

PATCH 1/2 dm: usb: udc: Use SEQ_ALIAS to index the USB gadget ports

Tested on BeagleBoard X15, works fine. Thanks, Jean-Jacques!

Lukasz, is there any way this series can make it to v2019.01 release? Like to see it there, for stability/consistence reasons.

Thanks!

Quoted 75 lines · Lukasz Majewski

Hi Marek, Jean-Jacques,

Quoted 17 lines · Jean-Jacques Hiblot
Quoted 2 lines

dfu, fastbot and other usb gadget commands take the USB port index as a

fastboot.

Looks good to me, I expect Lukasz to pick it, test it and send me a PR.

Quoted 8 lines

parameter. Currently this index is assigned in the order of the driver bindings.
Changing this behavior using the SEQ_ALIAS feature. This option assign to the device a SEQ number based on its alias (if it exists)

To use it we must set the DM_UC_FLAG_SEQ_ALIAS flag and follow the existing naming convention: use "usb" for the name of the gadget UCLASS_DRIVER (same as for the UCLASS_USB).

I must admit that this change fixes a long standing problem with the usb number assignment.

Great job. I will test and send it in a few days time.

Quoted 27 lines
Quoted 27 lines

If no alias is provided, then the index falls back to the order in which the bindings took place.

---

 drivers/usb/gadget/udc/udc-uclass.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
(quoted diff) +0 -0

b/drivers/usb/gadget/udc/udc-uclass.c index 0620518..e9f8f5f 100644

drivers/usb/gadget/udc/udc-uclass.c +1 -1
@@ -20,7 +20,7 @@ int usb_gadget_initialize(int index)
            return -EINVAL;
    if (dev_array[index])
            return 0;
-   ret = uclass_get_device(UCLASS_USB_GADGET_GENERIC, index,
 &dev);
+   ret = uclass_get_device_by_seq(UCLASS_USB_GADGET_GENERIC,
 index, &dev); if (!dev || ret) {
            pr_err("No USB device found\n");
            return -ENODEV;
drivers/usb/gadget/udc/udc-uclass.c +0 -0
@@ -54,5 +54,6 @@ int usb_gadget_handle_interrupts(int index)
 
Quoted 9 lines

drivers/usb/gadget/udc/udc-uclass.c int usb_gadget_handle_interrupts(int index) · line 59

Quoted 7 lines
drivers/usb/gadget/udc/udc-uclass.c +2 -1
 UCLASS_DRIVER(usb_gadget_generic) = {
    .id             = UCLASS_USB_GADGET_GENERIC,
-   .name           = "usb_gadget_generic",
+   .name           = "usb",
+   .flags          = DM_UC_FLAG_SEQ_ALIAS,
 };

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de

#5 lore raw

PATCH 2/2 ARM: dts: define USB aliases for all omap5 platforms

In reply to Jean-Jacques Hiblot

This allows us to properly map the USB controller indexes

Tested on dra76 evm, am572 evm

---

 arch/arm/dts/omap5-u-boot.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm/dts/omap5-u-boot.dtsi +5 -0
index 1eb50cd..54a7285 100644
@@ -12,6 +12,11 @@
 		tick-timer = &timer2;
 	};
 
+	aliases {
+		usb0 = &usb1;
+		usb1 = &usb2;
+	};
+
 	ocp {
 		u-boot,dm-spl;
 
Signature · 1 line
2.7.4