usbotg: otg_set_mode() can only be called once

Ahmad Fatoum a.fatoum at pengutronix.de
Thu Aug 24 06:23:17 PDT 2023


Hello Christian,

On 24.08.23 14:04, Christian Eggers wrote:
> ok, I should better read the manuals ...
> 
> "Once a specific mode has been selected it can't be changed later anymore."
> 
> In the past I used two OTG cores, one as device and one as host. So both
> OTGs were set to a fixed drmode in the device tree.
> 
> No I need to implement both features via a single OTG.  But probably
> I can use another criteria for choosing the correct boot methods instead of
> trying both.

Obvious choices is checking [ "$bootsource" = serial ] or checking if device
is gadget through ID pin or Type C controller.

Is that possible in your case?

Cheers,
Ahmad

> 
> 
> On Thursday, 24 August 2023, 13:30:46 CEST, Christian Eggers wrote:
>> Application:
>>
>> 1. Try to boot via fastboot (usb device)
>> 2. Try to boot via usb drive (usb host)
>>
>> Problem:
>>
>> barebox at i.MX6ULL:/ setenv otg.mode=host
>> imx-usb 2184000.usb at 2184000.of: USB EHCI 1.00
>> barebox at i.MX6ULL:/ setenv otg.mode=peripheral
>> Cannot set parameter otg.mode: Device or resource busy
>>
>> Analysis:
>>
>> The otgdev core maintains one `struct otg_mode` per device.  The function
>> checks whether the current mode is equal to USB_DR_MODE_OTG.  If not, it
>> returns -EBUSY.  There is currently no way to reset the current mode back to
>> USB_DR_MODE_OTG after it has been set to peripheral or host mode once.
>>
>>
> 
> 
> 
> 
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




More information about the barebox mailing list