Re: [PATCH] usb: dwc2: Reset device address on EnumDone

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Felipe,

On 2/6/2019 10:44 AM, Felipe Balbi wrote:
> 
> Hi,
> 
> Minas Harutyunyan <minas.harutyunyan@xxxxxxxxxxxx> writes:
>> Hi Felipe,
>>
>> On 1/21/2019 11:13 AM, Minas Harutyunyan wrote:
>>> Hi Felipe,
>>>
>>> On 12/12/2018 3:43 PM, Minas Harutyunyan wrote:
>>>> Initially resetting device address was done in USB RESET interrupt
>>>> handler. In case, when power saving mode enabled (hibernation) USB
>>>> RESET interrupt handled in dwc2_handle_gpwrdn_intr() and then it
>>>> not seen in dwc2_hsotg_irq() handler. This is why reset device
>>>> address to zero moved from USB RESET handler to EnumDone handler.
>>>>
>>>> Signed-off-by: Minas Harutyunyan <hminas@xxxxxxxxxxxx>
>>>> ---
>>>>     drivers/usb/dwc2/gadget.c | 6 +++---
>>>>     1 file changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
>>>> index 68ad75a7460d..7f922f19f8e1 100644
>>>> --- a/drivers/usb/dwc2/gadget.c
>>>> +++ b/drivers/usb/dwc2/gadget.c
>>>> @@ -3072,6 +3072,9 @@ static void dwc2_hsotg_irq_enumdone(struct dwc2_hsotg *hsotg)
>>>>     
>>>>     	dev_dbg(hsotg->dev, "EnumDone (DSTS=0x%08x)\n", dsts);
>>>>     
>>>> +	/* Reset device address to zero */
>>>> +	dwc2_clear_bit(hsotg, DCFG, DCFG_DEVADDR_MASK);
>>>> +
>>>>     	/*
>>>>     	 * note, since we're limited by the size of transfer on EP0, and
>>>>     	 * it seems IN transfers must be a even number of packets we do
>>>> @@ -3614,9 +3617,6 @@ static irqreturn_t dwc2_hsotg_irq(int irq, void *pw)
>>>>     		/* Report disconnection if it is not already done. */
>>>>     		dwc2_hsotg_disconnect(hsotg);
>>>>     
>>>> -		/* Reset device address to zero */
>>>> -		dwc2_clear_bit(hsotg, DCFG, DCFG_DEVADDR_MASK);
>>>> -
>>>>     		if (usb_status & GOTGCTL_BSESVLD && connected)
>>>>     			dwc2_hsotg_core_init_disconnected(hsotg, true);
>>>>     	}
>>>>
>>>
>>> This patch not seen yet in your testing/fixes or next. Any reason for
>>> delay or you missed it?
>>>
>>> Thanks,
>>> Minas
>>>
>>>
>> Not seen yet. Ping again.
> 
> I don't see any indication that this is a bug fix that needs to go
> during -rc cycle, so I was gonna queue it for next merge window.
> 
> Frankly, moving address reset to enumdone sounds like a bad idea. It
> looks to me that you're moving the problem from one place to another
> because of hibernation.
> 
> I would, rather, suggest that you review your interrupt handler and make
> sure it's compliant with your documentation. Why is RESET handled by
> HIBERNATION handler, for example?

Yes, you are right. I'll add clearing device address in hibernation 
handler, in case of exiting from hibernation triggered by USB Reset.

Please ignore this patch.

> 
> Anyway, I'm gonna wait for your reply before doing anything with this
> patch.
> 





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux