grub-devel
[Top][All Lists]
Advanced

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

Re: [Patch] USB UHCI portstatus correction


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: [Patch] USB UHCI portstatus correction
Date: Mon, 28 Jun 2010 18:48:00 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100515 Icedove/3.0.4

On 06/26/2010 12:03 AM, Aleš Nesrsta wrote:
> Vladimir 'φ-coder/phcoder' Serbinenko wrote:
>   
>> On 06/20/2010 11:23 AM, Aleš Nesrsta wrote:
>>     
>>> Hi,
>>>
>>> I found some mistake in uhci.c in grub_uhci_portstatus when enable=0.
>>> There is proposal of correction.
>>>
>>> Without correction portstatus reported false timeout when enable=0
>>> because it is waiting for reset to be done but none is performed...
>>>
>>>   
>>>       
>> This patch seems to change much more that you say. In particular
>> enable=0 is a request to disable port and you seem to always enable it.
>> This is likely to break other code.
>>     
> Hi,
> You are right according to some possible side-effects. But the lines
> ...
> if (!enable) /* We don't need reset port */
>     {
>       /* Disable the port.  */
>       grub_uhci_writereg16 (u, reg, 0 << 2);
> ...
> should disable the port as the bit "Port Enable" is reset.
>
> Port reset should be not necessary when disabling port - according to
> USB specification, reset of port should be done only to enable port and
> mainly to bring newly connected device to "Default" state (i.e. to state
> when device accepts communication via address 0).
>
> Of course:
> - I can be wrong
> - it should be tested according to some side-effect
>
> But in original code is real bug - if this function is called with
> enable=0, it reports false timeout as it is waiting for bit which will
> never set in this case.
> This bug should be corrected in some way.
>
>   
I have nothing against that change. I was mainly referring to:

-  grub_uhci_writereg16 (u, reg, enable << 9);
+  grub_uhci_writereg16 (u, reg, 1 << 9);
Which seems to always enable the port.


> There is also question, why does the function attach_root_port (in
> usbhub.c) disable and enable of port before initialize connected
> device ?
> Reset & enable of port (if new device is connected) should be enough,
> because, according to USB specification:
> - hub should automatically disable the port if device is disconnected or
> port is not powered
> - ports should be disabled by hub after power-up of hub
> But maybe there are some special cases or buggy hubs/devices which needs
> such behavior (?) - I don't know, so I didn't touch this part of code.
>
>   
It's the right strategy: if it doesn't bug and unlikely to, leave it alone.
> Best regards
> Ales
>
>   
>>> Best regards
>>> Ales
>>>   
>>>
>>>
>>> _______________________________________________
>>> Grub-devel mailing list
>>> address@hidden
>>> http://lists.gnu.org/mailman/listinfo/grub-devel
>>>   
>>>       
>>
>> _______________________________________________
>> Grub-devel mailing list
>> address@hidden
>> http://lists.gnu.org/mailman/listinfo/grub-devel
>>     
>
> _______________________________________________
> Grub-devel mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
>   


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]