[PATCH] usb: gadget: ether: split start/stop from init/halt

Niel Fourie lusus at denx.de
Tue Dec 13 12:01:51 CET 2022


Hi Marek,

On 12/12/2022 17:46, Marek Vasut wrote:
> On 12/12/22 16:29, Niel Fourie wrote:
>> Split out _usb_eth_start() from _usb_eth_init() and
>> usb_eth_stop() from _usb_eth_halt(). Now _usb_eth_init() only
>> initialises and registers the gadget device, which _usb_eth_halt()
>> reverses, and together are used for probing and removing the
>> device. The _usb_eth_start() and _usb_eth_stop() functions connect
>> and disconnect the gadget as expected by the start()/stop()
>> callbacks.
>>
>> Previously the gadget device was probed on every start() and
>> removed on every stop(), which is inconsistent with other DM_ETH
>> drivers. For non-DM gadget drivers the old behaviour has been
>> retained.
> 
> Does this mean the udevice pointer and associated private date are 
> retained during the entire operation of the USB gadget , i.e. even 
> between stop/start cycles ?

In the DM_ETH case, yes. The drivers/devices remain registered the whole 
time between _usb_eth_init() and _usb_eth_halt(), and the need for 
revalidating the private data pointer falls away as was done in my 
previous patch.

I tested this on imx8mp with the dwc3 gadget driver, and the data 
structures, specifically the private data, remained intact from probe() 
until remove(). I also tested that probing again after removal works as 
expected.

I tested the non-DM_ETH case on an iMX6 Phytec Mira (pcm058) which uses 
the ci_udc.c driver, which appears to not support DM_ETH yet. In that 
case the gadget drivers get registered/unregistered in 
usb_eth_init()/usb_eth_halt().

The legacy non-DM_ETH implementation uses init()/halt() similarly to 
start()/stop() in the DM_ETH implementation, but had no further 
equivalent for probe()/remove() in struct eth_device. When the Ethernet 
gadget was ported to DM_ETH, this difference most likely lead to the 
existing implementation.

I unfortunately did not have other devices on hand to test against, so I 
am hoping that there are no other surprises.

Best regards,
Niel Fourie

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


More information about the U-Boot mailing list